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

Side by Side Diff: cc/debug/micro_benchmark_controller_unittest.cc

Issue 300963004: cc: Add message passing mechanism to micro benchmarking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comments. Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/callback.h" 5 #include "base/callback.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "cc/debug/micro_benchmark.h" 7 #include "cc/debug/micro_benchmark.h"
8 #include "cc/debug/micro_benchmark_controller.h" 8 #include "cc/debug/micro_benchmark_controller.h"
9 #include "cc/layers/layer.h" 9 #include "cc/layers/layer.h"
10 #include "cc/resources/resource_update_queue.h" 10 #include "cc/resources/resource_update_queue.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 }; 42 };
43 43
44 void Noop(scoped_ptr<base::Value> value) { 44 void Noop(scoped_ptr<base::Value> value) {
45 } 45 }
46 46
47 void IncrementCallCount(int* count, scoped_ptr<base::Value> value) { 47 void IncrementCallCount(int* count, scoped_ptr<base::Value> value) {
48 ++(*count); 48 ++(*count);
49 } 49 }
50 50
51 TEST_F(MicroBenchmarkControllerTest, ScheduleFail) { 51 TEST_F(MicroBenchmarkControllerTest, ScheduleFail) {
52 bool result = layer_tree_host_->ScheduleMicroBenchmark( 52 int id = layer_tree_host_->ScheduleMicroBenchmark(
53 "non_existant_benchmark", scoped_ptr<base::Value>(), base::Bind(&Noop)); 53 "non_existant_benchmark", scoped_ptr<base::Value>(), base::Bind(&Noop));
54 EXPECT_FALSE(result); 54 EXPECT_EQ(id, 0);
55 } 55 }
56 56
57 TEST_F(MicroBenchmarkControllerTest, CommitScheduled) { 57 TEST_F(MicroBenchmarkControllerTest, CommitScheduled) {
58 EXPECT_FALSE(layer_tree_host_->needs_commit()); 58 EXPECT_FALSE(layer_tree_host_->needs_commit());
59 bool result = layer_tree_host_->ScheduleMicroBenchmark( 59 int id = layer_tree_host_->ScheduleMicroBenchmark(
60 "unittest_only_benchmark", scoped_ptr<base::Value>(), base::Bind(&Noop)); 60 "unittest_only_benchmark", scoped_ptr<base::Value>(), base::Bind(&Noop));
61 EXPECT_TRUE(result); 61 EXPECT_GT(id, 0);
62 EXPECT_TRUE(layer_tree_host_->needs_commit()); 62 EXPECT_TRUE(layer_tree_host_->needs_commit());
63 } 63 }
64 64
65 TEST_F(MicroBenchmarkControllerTest, BenchmarkRan) { 65 TEST_F(MicroBenchmarkControllerTest, BenchmarkRan) {
66 int run_count = 0; 66 int run_count = 0;
67 bool result = layer_tree_host_->ScheduleMicroBenchmark( 67 int id = layer_tree_host_->ScheduleMicroBenchmark(
68 "unittest_only_benchmark", 68 "unittest_only_benchmark",
69 scoped_ptr<base::Value>(), 69 scoped_ptr<base::Value>(),
70 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 70 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
71 EXPECT_TRUE(result); 71 EXPECT_GT(id, 0);
72 72
73 scoped_ptr<ResourceUpdateQueue> queue(new ResourceUpdateQueue); 73 scoped_ptr<ResourceUpdateQueue> queue(new ResourceUpdateQueue);
74 layer_tree_host_->SetOutputSurfaceLostForTesting(false); 74 layer_tree_host_->SetOutputSurfaceLostForTesting(false);
75 layer_tree_host_->UpdateLayers(queue.get()); 75 layer_tree_host_->UpdateLayers(queue.get());
76 76
77 EXPECT_EQ(1, run_count); 77 EXPECT_EQ(1, run_count);
78 } 78 }
79 79
80 TEST_F(MicroBenchmarkControllerTest, MultipleBenchmarkRan) { 80 TEST_F(MicroBenchmarkControllerTest, MultipleBenchmarkRan) {
81 int run_count = 0; 81 int run_count = 0;
82 bool result = layer_tree_host_->ScheduleMicroBenchmark( 82 int id = layer_tree_host_->ScheduleMicroBenchmark(
83 "unittest_only_benchmark", 83 "unittest_only_benchmark",
84 scoped_ptr<base::Value>(), 84 scoped_ptr<base::Value>(),
85 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 85 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
86 EXPECT_TRUE(result); 86 EXPECT_GT(id, 0);
87 result = layer_tree_host_->ScheduleMicroBenchmark( 87 id = layer_tree_host_->ScheduleMicroBenchmark(
88 "unittest_only_benchmark", 88 "unittest_only_benchmark",
89 scoped_ptr<base::Value>(), 89 scoped_ptr<base::Value>(),
90 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 90 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
91 EXPECT_TRUE(result); 91 EXPECT_GT(id, 0);
92 92
93 scoped_ptr<ResourceUpdateQueue> queue(new ResourceUpdateQueue); 93 scoped_ptr<ResourceUpdateQueue> queue(new ResourceUpdateQueue);
94 layer_tree_host_->SetOutputSurfaceLostForTesting(false); 94 layer_tree_host_->SetOutputSurfaceLostForTesting(false);
95 layer_tree_host_->UpdateLayers(queue.get()); 95 layer_tree_host_->UpdateLayers(queue.get());
96 96
97 EXPECT_EQ(2, run_count); 97 EXPECT_EQ(2, run_count);
98 98
99 result = layer_tree_host_->ScheduleMicroBenchmark( 99 id = layer_tree_host_->ScheduleMicroBenchmark(
100 "unittest_only_benchmark", 100 "unittest_only_benchmark",
101 scoped_ptr<base::Value>(), 101 scoped_ptr<base::Value>(),
102 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 102 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
103 EXPECT_TRUE(result); 103 EXPECT_GT(id, 0);
104 result = layer_tree_host_->ScheduleMicroBenchmark( 104 id = layer_tree_host_->ScheduleMicroBenchmark(
105 "unittest_only_benchmark", 105 "unittest_only_benchmark",
106 scoped_ptr<base::Value>(), 106 scoped_ptr<base::Value>(),
107 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 107 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
108 EXPECT_TRUE(result); 108 EXPECT_GT(id, 0);
109 109
110 layer_tree_host_->UpdateLayers(queue.get()); 110 layer_tree_host_->UpdateLayers(queue.get());
111 EXPECT_EQ(4, run_count); 111 EXPECT_EQ(4, run_count);
112 112
113 layer_tree_host_->UpdateLayers(queue.get()); 113 layer_tree_host_->UpdateLayers(queue.get());
114 EXPECT_EQ(4, run_count); 114 EXPECT_EQ(4, run_count);
115 } 115 }
116 116
117 TEST_F(MicroBenchmarkControllerTest, BenchmarkImplRan) { 117 TEST_F(MicroBenchmarkControllerTest, BenchmarkImplRan) {
118 int run_count = 0; 118 int run_count = 0;
119 scoped_ptr<base::DictionaryValue> settings(new base::DictionaryValue); 119 scoped_ptr<base::DictionaryValue> settings(new base::DictionaryValue);
120 settings->SetBoolean("run_benchmark_impl", true); 120 settings->SetBoolean("run_benchmark_impl", true);
121 121
122 // Schedule a main thread benchmark. 122 // Schedule a main thread benchmark.
123 bool result = layer_tree_host_->ScheduleMicroBenchmark( 123 int id = layer_tree_host_->ScheduleMicroBenchmark(
124 "unittest_only_benchmark", 124 "unittest_only_benchmark",
125 settings.PassAs<base::Value>(), 125 settings.PassAs<base::Value>(),
126 base::Bind(&IncrementCallCount, base::Unretained(&run_count))); 126 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
127 EXPECT_TRUE(result); 127 EXPECT_GT(id, 0);
128 128
129 // Schedule impl benchmarks. In production code, this is run in commit. 129 // Schedule impl benchmarks. In production code, this is run in commit.
130 layer_tree_host_->GetMicroBenchmarkController()->ScheduleImplBenchmarks( 130 layer_tree_host_->GetMicroBenchmarkController()->ScheduleImplBenchmarks(
131 layer_tree_host_impl_.get()); 131 layer_tree_host_impl_.get());
132 132
133 // Now complete the commit (as if on the impl thread). 133 // Now complete the commit (as if on the impl thread).
134 layer_tree_host_impl_->CommitComplete(); 134 layer_tree_host_impl_->CommitComplete();
135 135
136 // Make sure all posted messages run. 136 // Make sure all posted messages run.
137 base::MessageLoop::current()->RunUntilIdle(); 137 base::MessageLoop::current()->RunUntilIdle();
138 138
139 EXPECT_EQ(1, run_count); 139 EXPECT_EQ(1, run_count);
140 } 140 }
141 141
142 TEST_F(MicroBenchmarkControllerTest, SendMessage) {
143 // Send valid message to invalid benchmark (id = 0)
144 scoped_ptr<base::DictionaryValue> message(new base::DictionaryValue);
145 message->SetBoolean("can_handle", true);
146 bool message_handled = layer_tree_host_->SendMessageToMicroBenchmark(
147 0, message.PassAs<base::Value>());
148 EXPECT_FALSE(message_handled);
149
150 // Schedule a benchmark
151 int run_count = 0;
152 int id = layer_tree_host_->ScheduleMicroBenchmark(
153 "unittest_only_benchmark",
154 scoped_ptr<base::Value>(),
155 base::Bind(&IncrementCallCount, base::Unretained(&run_count)));
156 EXPECT_GT(id, 0);
157
158 // Send valid message to valid benchmark
159 message = scoped_ptr<base::DictionaryValue>(new base::DictionaryValue);
160 message->SetBoolean("can_handle", true);
161 message_handled = layer_tree_host_->SendMessageToMicroBenchmark(
162 id, message.PassAs<base::Value>());
163 EXPECT_TRUE(message_handled);
164
165 // Send invalid message to valid benchmark
166 message = scoped_ptr<base::DictionaryValue>(new base::DictionaryValue);
167 message->SetBoolean("can_handle", false);
168 message_handled = layer_tree_host_->SendMessageToMicroBenchmark(
169 id, message.PassAs<base::Value>());
170 EXPECT_FALSE(message_handled);
171 }
172
142 } // namespace 173 } // namespace
143 } // namespace cc 174 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698