From c8b0865a2e52dcdfb70bd4e344893bae5c5d0aa1 Mon Sep 17 00:00:00 2001 From: perkj Date: Wed, 22 Mar 2017 04:57:53 -0700 Subject: [PATCH] Reduce CPU usage in test::FrameGenerator::SquareGenerator. This cl change the drawing to use memset per row in each square instead of setting each pixel individually. BUG=webrtc:7380 Review-Url: https://codereview.webrtc.org/2764753003 Cr-Commit-Position: refs/heads/master@{#17339} --- webrtc/test/frame_generator.cc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/webrtc/test/frame_generator.cc b/webrtc/test/frame_generator.cc index cd0bcc6d04..e293642239 100644 --- a/webrtc/test/frame_generator.cc +++ b/webrtc/test/frame_generator.cc @@ -83,18 +83,20 @@ class SquareGenerator : public FrameGenerator { void Draw(const rtc::scoped_refptr& buffer) { x_ = (x_ + random_generator_.Rand(0, 4)) % (buffer->width() - length_); y_ = (y_ + random_generator_.Rand(0, 4)) % (buffer->height() - length_); - for (int x = x_; x < x_ + length_; ++x) { for (int y = y_; y < y_ + length_; ++y) { - uint8_t* pos_y = (buffer->MutableDataY() + x + y * buffer->StrideY()); - *pos_y = yuv_y_; - uint8_t* pos_u = - (buffer->MutableDataU() + x / 2 + y / 2 * buffer->StrideU()); - *pos_u = yuv_u_; - uint8_t* pos_v = - (buffer->MutableDataV() + x / 2 + y / 2 * buffer->StrideV()); - *pos_v = yuv_v_; + uint8_t* pos_y = + (buffer->MutableDataY() + x_ + y * buffer->StrideY()); + memset(pos_y, yuv_y_, length_); + } + + for (int y = y_; y < y_ + length_; y = y + 2) { + uint8_t* pos_u = + (buffer->MutableDataU() + x_ / 2 + y / 2 * buffer->StrideU()); + memset(pos_u, yuv_u_, length_ / 2); + uint8_t* pos_v = + (buffer->MutableDataV() + x_ / 2 + y / 2 * buffer->StrideV()); + memset(pos_v, yuv_v_, length_ / 2); } - } } private: