| Index: content/common/gpu/media/rendering_helper.cc
|
| diff --git a/content/common/gpu/media/rendering_helper.cc b/content/common/gpu/media/rendering_helper.cc
|
| index 6693f5f07dd5a2cb2b983ea5d289d1a1dc7b835c..37e7d92b0ddc2c8f00b39d426e5d3254cc735121 100644
|
| --- a/content/common/gpu/media/rendering_helper.cc
|
| +++ b/content/common/gpu/media/rendering_helper.cc
|
| @@ -58,7 +58,9 @@ static void CreateShader(GLuint program,
|
|
|
| namespace content {
|
|
|
| -RenderingHelperParams::RenderingHelperParams() {}
|
| +RenderingHelperParams::RenderingHelperParams()
|
| + : rendering_fps(0), warm_up_iterations(0), render_as_thumbnails(false) {
|
| +}
|
|
|
| RenderingHelperParams::~RenderingHelperParams() {}
|
|
|
| @@ -302,9 +304,36 @@ void RenderingHelper::Initialize(const RenderingHelperParams& params,
|
| glEnableVertexAttribArray(tc_location);
|
| glVertexAttribPointer(tc_location, 2, GL_FLOAT, GL_FALSE, 0, kTextureCoords);
|
|
|
| + if (frame_duration_ != base::TimeDelta())
|
| + WarmUpRendering(params.warm_up_iterations);
|
| +
|
| done->Signal();
|
| }
|
|
|
| +// The rendering for the first few frames is slow (e.g., 100ms on Peach Pit).
|
| +// This affects the numbers measured in the performance test. We try to render
|
| +// several frames here to warm up the rendering.
|
| +void RenderingHelper::WarmUpRendering(int warm_up_iterations) {
|
| + unsigned int texture_id;
|
| + scoped_ptr<GLubyte[]> emptyData(new GLubyte[screen_size_.GetArea() * 2]);
|
| + glGenTextures(1, &texture_id);
|
| + glBindTexture(GL_TEXTURE_2D, texture_id);
|
| + glTexImage2D(GL_TEXTURE_2D,
|
| + 0,
|
| + GL_RGB,
|
| + screen_size_.width(),
|
| + screen_size_.height(),
|
| + 0,
|
| + GL_RGB,
|
| + GL_UNSIGNED_SHORT_5_6_5,
|
| + emptyData.get());
|
| + for (int i = 0; i < warm_up_iterations; ++i) {
|
| + RenderTexture(GL_TEXTURE_2D, texture_id);
|
| + gl_surface_->SwapBuffers();
|
| + }
|
| + glDeleteTextures(1, &texture_id);
|
| +}
|
| +
|
| void RenderingHelper::UnInitialize(base::WaitableEvent* done) {
|
| CHECK_EQ(base::MessageLoop::current(), message_loop_);
|
|
|
|
|