Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(874)

Unified Diff: cc/test/layer_tree_test.cc

Issue 619843002: cc: Make separate interface for BeginFrame ipc from OutputSurface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/test/layer_tree_test.cc
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 15a1a44ef73260bfc79c3943ee09aaaaf19b7b7e..837a87340816ce357d26d1bbdbae04d49fde4b6c 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -15,6 +15,7 @@
#include "cc/layers/layer.h"
#include "cc/layers/layer_impl.h"
#include "cc/test/animation_test_common.h"
+#include "cc/test/begin_frame_args_test.h"
#include "cc/test/fake_layer_tree_host_client.h"
#include "cc/test/fake_output_surface.h"
#include "cc/test/test_context_provider.h"
@@ -48,6 +49,38 @@ base::TimeDelta TestHooks::LowFrequencyAnimationInterval() const {
return base::TimeDelta::FromMilliseconds(16);
}
+class ExternalBeginFrameSourceForTest
+ : public BeginFrameSourceMixIn,
+ public NON_EXPORTED_BASE(base::NonThreadSafe) {
+ public:
+ ExternalBeginFrameSourceForTest() : weak_ptr_factory_(this) {
+ DetachFromThread();
+ }
+
+ virtual ~ExternalBeginFrameSourceForTest() {
+ DCHECK(CalledOnValidThread());
+ }
+
+ virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override {
+ DCHECK(CalledOnValidThread());
+ if (needs_begin_frames) {
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&ExternalBeginFrameSourceForTest::TestOnBeginFrame,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(16));
brianderson 2014/10/18 00:08:45 Will this slow down the LayerTree tests? I think t
danakj 2014/10/18 18:02:39 https://code.google.com/p/chromium/codesearch#chro
simonhong 2014/10/23 01:03:08 Modified to use refresh_rate.
+ }
+ }
+
+ void TestOnBeginFrame() {
+ DCHECK(CalledOnValidThread());
+ CallOnBeginFrame(CreateBeginFrameArgsForTesting());
+ }
+
+ private:
+ base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_;
+};
+
// Adapts ThreadProxy for test. Injects test hooks for testing.
class ThreadProxyForTest : public ThreadProxy {
public:
@@ -55,9 +88,14 @@ class ThreadProxyForTest : public ThreadProxy {
TestHooks* test_hooks,
LayerTreeHost* host,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) {
return make_scoped_ptr(new ThreadProxyForTest(
- test_hooks, host, main_task_runner, impl_task_runner));
+ test_hooks,
+ host,
+ main_task_runner,
+ impl_task_runner,
+ external_begin_frame_source.Pass()));
}
virtual ~ThreadProxyForTest() {}
@@ -100,8 +138,11 @@ class ThreadProxyForTest : public ThreadProxy {
TestHooks* test_hooks,
LayerTreeHost* host,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
- : ThreadProxy(host, main_task_runner, impl_task_runner),
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
+ scoped_ptr<BeginFrameSource> external_begin_frame_source)
+ : ThreadProxy(host, main_task_runner,
+ impl_task_runner,
+ external_begin_frame_source.Pass()),
test_hooks_(test_hooks) {}
};
@@ -347,7 +388,8 @@ class LayerTreeHostForTesting : public LayerTreeHost {
LayerTreeHostClientForTesting* client,
const LayerTreeSettings& settings,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner) {
+ scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner,
+ scoped_ptr<BeginFrameSource> external_begin_frame_source) {
scoped_ptr<LayerTreeHostForTesting> layer_tree_host(
new LayerTreeHostForTesting(test_hooks, client, settings));
if (impl_task_runner.get()) {
@@ -355,10 +397,14 @@ class LayerTreeHostForTesting : public LayerTreeHost {
ThreadProxyForTest::Create(test_hooks,
layer_tree_host.get(),
main_task_runner,
- impl_task_runner));
+ impl_task_runner,
+ external_begin_frame_source.Pass()));
} else {
layer_tree_host->InitializeForTesting(SingleThreadProxy::Create(
- layer_tree_host.get(), client, main_task_runner));
+ layer_tree_host.get(),
+ client,
+ main_task_runner,
+ external_begin_frame_source.Pass()));
}
return layer_tree_host.Pass();
}
@@ -524,13 +570,19 @@ void LayerTreeTest::WillBeginTest() {
void LayerTreeTest::DoBeginTest() {
client_ = LayerTreeHostClientForTesting::Create(this);
+ scoped_ptr<BeginFrameSource> external_begin_frame_source;
+ if (settings_.begin_frame_scheduling_enabled &&
+ settings_.throttle_frame_production)
+ external_begin_frame_source.reset(new ExternalBeginFrameSourceForTest);
+
DCHECK(!impl_thread_ || impl_thread_->message_loop_proxy().get());
layer_tree_host_ = LayerTreeHostForTesting::Create(
this,
client_.get(),
settings_,
base::MessageLoopProxy::current(),
- impl_thread_ ? impl_thread_->message_loop_proxy() : NULL);
+ impl_thread_ ? impl_thread_->message_loop_proxy() : NULL,
+ external_begin_frame_source.Pass());
ASSERT_TRUE(layer_tree_host_);
started_ = true;

Powered by Google App Engine
This is Rietveld 408576698