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

Side by Side Diff: ui/compositor/compositor_unittest.cc

Issue 1000503002: Add BeginFrameObserverProxy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/basictypes.h"
6 #include "base/compiler_specific.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "cc/output/begin_frame_args.h"
9 #include "cc/test/begin_frame_args_test.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/compositor/compositor.h"
12 #include "ui/compositor/test/context_factories_for_test.h"
13 #include "ui/gfx/geometry/rect.h"
14
15 namespace ui {
16
17 namespace {
18
19 class FakeTaskRunner : public base::SingleThreadTaskRunner {
mithro-old 2015/03/11 03:42:58 We definitely shouldn't be duplicating this FakeTe
simonhong 2015/03/11 16:27:47 Removed and replaced with TestSimpleTaskRunner.
20 public:
21 FakeTaskRunner() {}
22
23 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
24 const base::Closure& task,
25 base::TimeDelta delay) override {
26 return true;
27 }
28 bool PostDelayedTask(const tracked_objects::Location& from_here,
29 const base::Closure& task,
30 base::TimeDelta delay) override {
31 return true;
32 }
33 bool RunsTasksOnCurrentThread() const override { return true; }
34
35 protected:
36 ~FakeTaskRunner() override {}
37 };
38
39 class TestCompositorBeginFrameObserver : public CompositorBeginFrameObserver {
mithro-old 2015/03/11 03:42:58 Looking at this, what you should be using gmock he
simonhong 2015/03/11 16:27:47 Thanks for suggestion. Looks clear with gmock!
40 public:
41 TestCompositorBeginFrameObserver() : send_begin_frame_called_(false) {}
42 ~TestCompositorBeginFrameObserver() override {}
43
44 void OnSendBeginFrame(const cc::BeginFrameArgs& args) override {
45 send_begin_frame_called_ = true;
46 }
47
48 void Reset() {
49 send_begin_frame_called_ = false;
50 }
51
52 bool send_begin_frame_called() { return send_begin_frame_called_; }
53
54 private:
55 bool send_begin_frame_called_;
56 };
57
58 class BeginFrameWithCompositorTest : public testing::Test {
59 public:
60 BeginFrameWithCompositorTest() {}
61 ~BeginFrameWithCompositorTest() override {}
62
63 // Overridden from testing::Test:
64 void SetUp() override {
65 bool enable_pixel_output = false;
66 ui::ContextFactory* context_factory =
67 InitializeContextFactoryForTests(enable_pixel_output);
68 compositor_task_runner_ = new FakeTaskRunner();
69 compositor_.reset(new ui::Compositor(gfx::kNullAcceleratedWidget,
70 context_factory,
71 compositor_task_runner_.get()));
72 }
73
74 void TearDown() override {
75 compositor_.reset();
76 TerminateContextFactoryForTests();
77 }
78
79 Compositor* compositor() { return compositor_.get(); }
80
81 cc::BeginFrameArgs missed_begin_frame_args() {
82 return compositor()->MissedBeginFrameArgsForTesting();
83 }
84
85 private:
86 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
87 scoped_ptr<ui::Compositor> compositor_;
88
89 DISALLOW_COPY_AND_ASSIGN(BeginFrameWithCompositorTest);
90 };
91
92 // Tests whether |missed_begin_frame_args_| is used immediately or not when new
93 // observer is added.
94 TEST_F(BeginFrameWithCompositorTest, AddBeginFrameObserver) {
95 cc::BeginFrameArgs last_args =
96 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE,
97 base::TimeTicks::FromInternalValue(33));
98 cc::BeginFrameArgs new_args =
99 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE,
100 base::TimeTicks::FromInternalValue(55));
101 TestCompositorBeginFrameObserver test_observer;
102
103 // Simulate to trigger new BeginFrame by using |new_args|.
104 compositor()->SendBeginFramesToChildren(new_args);
105 // |new_args| is stored in |missed_begin_frame_args_| in Compositor for using
106 // later added observers.
107 EXPECT_EQ(new_args.frame_time,
108 missed_begin_frame_args().frame_time);
109
110 // When new observer is added, Compositor immediately sends BeginFrame with
111 // |missed_begin_frame_args_| when new observer didn't used it.
112 compositor()->AddBeginFrameObserver(&test_observer, last_args);
113 EXPECT_TRUE(test_observer.send_begin_frame_called());
114 compositor()->RemoveBeginFrameObserver(&test_observer);
115
116 test_observer.Reset();
117 // BeginFrame is not sended immediately because new observer already used
118 // |missed_begin_frame_args_|.
119 compositor()->AddBeginFrameObserver(&test_observer, new_args);
120 EXPECT_FALSE(test_observer.send_begin_frame_called());
121 compositor()->RemoveBeginFrameObserver(&test_observer);
122 }
123
124 } // namespace
125 } // namespace ui
OLDNEW
« content/browser/compositor/delegated_frame_host_unittest.cc ('K') | « ui/compositor/compositor.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698