summaryrefslogtreecommitdiffstats
path: root/cc/test/fake_output_surface.cc
diff options
context:
space:
mode:
authorbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-12 13:21:48 +0000
committerbrianderson@chromium.org <brianderson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-12 13:21:48 +0000
commitbe62216f3ea56d5e9dc9bccf2c37e6e7937de290 (patch)
treef7da60411946679e8666addc93d4fe9a82216aa5 /cc/test/fake_output_surface.cc
parentff0f4128d79ff878318a0c266947ee5ad14fc662 (diff)
downloadchromium_src-be62216f3ea56d5e9dc9bccf2c37e6e7937de290.zip
chromium_src-be62216f3ea56d5e9dc9bccf2c37e6e7937de290.tar.gz
chromium_src-be62216f3ea56d5e9dc9bccf2c37e6e7937de290.tar.bz2
cc: Emulate BeginFrame in OutputSurfaces that don't support it natively
This will allow us to avoid having two different code paths in the Scheduler. It also allows us to more easily remove the VSyncTimeSource and FrameRateController from the Scheduler. This patch instantiates the FrameRateController inside of OutputSurface for now, but the FrameRateController could be removed in future patches. BUG=245920 BUG=243497 Review URL: https://chromiumcodereview.appspot.com/15836005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205750 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/test/fake_output_surface.cc')
-rw-r--r--cc/test/fake_output_surface.cc26
1 files changed, 21 insertions, 5 deletions
diff --git a/cc/test/fake_output_surface.cc b/cc/test/fake_output_surface.cc
index c3f3e1a..9ceadda 100644
--- a/cc/test/fake_output_surface.cc
+++ b/cc/test/fake_output_surface.cc
@@ -8,6 +8,7 @@
#include "base/message_loop.h"
#include "cc/output/compositor_frame_ack.h"
#include "cc/output/output_surface_client.h"
+#include "testing/gtest/include/gtest/gtest.h"
namespace cc {
@@ -17,7 +18,8 @@ FakeOutputSurface::FakeOutputSurface(
: OutputSurface(context3d.Pass()),
num_sent_frames_(0),
needs_begin_frame_(false),
- forced_draw_to_software_device_(false) {
+ forced_draw_to_software_device_(false),
+ fake_weak_ptr_factory_(this) {
if (delegated_rendering) {
capabilities_.delegated_rendering = true;
capabilities_.max_frames_pending = 1;
@@ -28,7 +30,8 @@ FakeOutputSurface::FakeOutputSurface(
scoped_ptr<SoftwareOutputDevice> software_device, bool delegated_rendering)
: OutputSurface(software_device.Pass()),
num_sent_frames_(0),
- forced_draw_to_software_device_(false) {
+ forced_draw_to_software_device_(false),
+ fake_weak_ptr_factory_(this) {
if (delegated_rendering) {
capabilities_.delegated_rendering = true;
capabilities_.max_frames_pending = 1;
@@ -41,7 +44,8 @@ FakeOutputSurface::FakeOutputSurface(
bool delegated_rendering)
: OutputSurface(context3d.Pass(), software_device.Pass()),
num_sent_frames_(0),
- forced_draw_to_software_device_(false) {
+ forced_draw_to_software_device_(false),
+ fake_weak_ptr_factory_(this) {
if (delegated_rendering) {
capabilities_.delegated_rendering = true;
capabilities_.max_frames_pending = 1;
@@ -56,6 +60,7 @@ void FakeOutputSurface::SwapBuffers(CompositorFrame* frame) {
frame->AssignTo(&last_sent_frame_);
++num_sent_frames_;
PostSwapBuffersComplete();
+ DidSwapBuffers();
} else {
OutputSurface::SwapBuffers(frame);
frame->AssignTo(&last_sent_frame_);
@@ -65,12 +70,23 @@ void FakeOutputSurface::SwapBuffers(CompositorFrame* frame) {
void FakeOutputSurface::SetNeedsBeginFrame(bool enable) {
needs_begin_frame_ = enable;
+ OutputSurface::SetNeedsBeginFrame(enable);
+
+ // If there is not BeginFrame emulation from the FrameRateController,
+ // then we just post a BeginFrame to emulate it as part of the test.
+ if (enable && !frame_rate_controller_) {
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, base::Bind(&FakeOutputSurface::OnBeginFrame,
+ fake_weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(16));
+ }
}
-void FakeOutputSurface::BeginFrame(base::TimeTicks frame_time) {
- client_->BeginFrame(frame_time);
+void FakeOutputSurface::OnBeginFrame() {
+ OutputSurface::BeginFrame(base::TimeTicks::Now());
}
+
bool FakeOutputSurface::ForcedDrawToSoftwareDevice() const {
return forced_draw_to_software_device_;
}