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

Side by Side Diff: chrome/test/chromedriver/performance_logger_unittest.cc

Issue 2777883003: Remove ScopedVector from chrome/test/chromedriver/ (Closed)
Patch Set: address nit from stgao@ Created 3 years, 8 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
« no previous file with comments | « chrome/test/chromedriver/logging_unittest.cc ('k') | chrome/test/chromedriver/session.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/test/chromedriver/performance_logger.h" 5 #include "chrome/test/chromedriver/performance_logger.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
11 #include <vector>
11 12
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
13 #include "base/format_macros.h" 14 #include "base/format_macros.h"
14 #include "base/json/json_reader.h" 15 #include "base/json/json_reader.h"
15 #include "base/memory/scoped_vector.h" 16 #include "base/memory/ptr_util.h"
16 #include "base/time/time.h" 17 #include "base/time/time.h"
17 #include "base/values.h" 18 #include "base/values.h"
18 #include "chrome/test/chromedriver/chrome/devtools_client_impl.h" 19 #include "chrome/test/chromedriver/chrome/devtools_client_impl.h"
19 #include "chrome/test/chromedriver/chrome/log.h" 20 #include "chrome/test/chromedriver/chrome/log.h"
20 #include "chrome/test/chromedriver/chrome/status.h" 21 #include "chrome/test/chromedriver/chrome/status.h"
21 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h" 22 #include "chrome/test/chromedriver/chrome/stub_devtools_client.h"
22 #include "chrome/test/chromedriver/session.h" 23 #include "chrome/test/chromedriver/session.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 namespace { 26 namespace {
(...skipping 11 matching lines...) Expand all
37 }; 38 };
38 39
39 class FakeDevToolsClient : public StubDevToolsClient { 40 class FakeDevToolsClient : public StubDevToolsClient {
40 public: 41 public:
41 explicit FakeDevToolsClient(const std::string& id) 42 explicit FakeDevToolsClient(const std::string& id)
42 : id_(id), listener_(nullptr), command_index_(0) {} 43 : id_(id), listener_(nullptr), command_index_(0) {}
43 ~FakeDevToolsClient() override {} 44 ~FakeDevToolsClient() override {}
44 45
45 bool PopSentCommand(DevToolsCommand** out_command) { 46 bool PopSentCommand(DevToolsCommand** out_command) {
46 if (sent_commands_.size() > command_index_) { 47 if (sent_commands_.size() > command_index_) {
47 *out_command = sent_commands_.get().at(command_index_++); 48 *out_command = sent_commands_[command_index_++].get();
48 return true; 49 return true;
49 } 50 }
50 return false; 51 return false;
51 } 52 }
52 53
53 Status TriggerEvent(const std::string& method) { 54 Status TriggerEvent(const std::string& method) {
54 base::DictionaryValue empty_params; 55 base::DictionaryValue empty_params;
55 return listener_->OnEvent(this, method, empty_params); 56 return listener_->OnEvent(this, method, empty_params);
56 } 57 }
57 58
58 Status TriggerEvent(const std::string& method, 59 Status TriggerEvent(const std::string& method,
59 const base::DictionaryValue& params) { 60 const base::DictionaryValue& params) {
60 return listener_->OnEvent(this, method, params); 61 return listener_->OnEvent(this, method, params);
61 } 62 }
62 63
63 // Overridden from DevToolsClient: 64 // Overridden from DevToolsClient:
64 Status ConnectIfNecessary() override { return listener_->OnConnected(this); } 65 Status ConnectIfNecessary() override { return listener_->OnConnected(this); }
65 66
66 Status SendCommandAndGetResult( 67 Status SendCommandAndGetResult(
67 const std::string& method, 68 const std::string& method,
68 const base::DictionaryValue& params, 69 const base::DictionaryValue& params,
69 std::unique_ptr<base::DictionaryValue>* result) override { 70 std::unique_ptr<base::DictionaryValue>* result) override {
70 sent_commands_.push_back(new DevToolsCommand(method, 71 sent_commands_.push_back(
71 params.DeepCopy())); 72 base::MakeUnique<DevToolsCommand>(method, params.DeepCopy()));
72 return Status(kOk); 73 return Status(kOk);
73 } 74 }
74 75
75 void AddListener(DevToolsEventListener* listener) override { 76 void AddListener(DevToolsEventListener* listener) override {
76 CHECK(!listener_); 77 CHECK(!listener_);
77 listener_ = listener; 78 listener_ = listener;
78 } 79 }
79 80
80 const std::string& GetId() override { return id_; } 81 const std::string& GetId() override { return id_; }
81 82
82 private: 83 private:
83 const std::string id_; // WebView id. 84 const std::string id_; // WebView id.
84 ScopedVector<DevToolsCommand> sent_commands_; // Commands that were sent. 85 std::vector<std::unique_ptr<DevToolsCommand>>
86 sent_commands_; // Commands that were sent.
85 DevToolsEventListener* listener_; // The fake allows only one event listener. 87 DevToolsEventListener* listener_; // The fake allows only one event listener.
86 size_t command_index_; 88 size_t command_index_;
87 }; 89 };
88 90
89 struct LogEntry { 91 struct LogEntry {
90 const base::Time timestamp; 92 const base::Time timestamp;
91 const Log::Level level; 93 const Log::Level level;
92 const std::string source; 94 const std::string source;
93 const std::string message; 95 const std::string message;
94 96
95 LogEntry(const base::Time& timestamp, 97 LogEntry(const base::Time& timestamp,
96 Log::Level level, 98 Log::Level level,
97 const std::string& source, 99 const std::string& source,
98 const std::string& message) 100 const std::string& message)
99 : timestamp(timestamp), level(level), source(source), message(message) {} 101 : timestamp(timestamp), level(level), source(source), message(message) {}
100 }; 102 };
101 103
102 class FakeLog : public Log { 104 class FakeLog : public Log {
103 public: 105 public:
104 void AddEntryTimestamped(const base::Time& timestamp, 106 void AddEntryTimestamped(const base::Time& timestamp,
105 Level level, 107 Level level,
106 const std::string& source, 108 const std::string& source,
107 const std::string& message) override; 109 const std::string& message) override;
108 110
109 bool Emptied() const override; 111 bool Emptied() const override;
110 112
111 const ScopedVector<LogEntry>& GetEntries() { 113 const std::vector<std::unique_ptr<LogEntry>>& GetEntries() {
112 return entries_; 114 return entries_;
113 } 115 }
114 116
115 private: 117 private:
116 ScopedVector<LogEntry> entries_; 118 std::vector<std::unique_ptr<LogEntry>> entries_;
117 }; 119 };
118 120
119 void FakeLog::AddEntryTimestamped(const base::Time& timestamp, 121 void FakeLog::AddEntryTimestamped(const base::Time& timestamp,
120 Level level, 122 Level level,
121 const std::string& source, 123 const std::string& source,
122 const std::string& message) { 124 const std::string& message) {
123 entries_.push_back(new LogEntry(timestamp, level, source, message)); 125 entries_.push_back(
126 base::MakeUnique<LogEntry>(timestamp, level, source, message));
124 } 127 }
125 128
126 bool FakeLog::Emptied() const { 129 bool FakeLog::Emptied() const {
127 return true; 130 return true;
128 } 131 }
129 132
130 std::unique_ptr<base::DictionaryValue> ParseDictionary( 133 std::unique_ptr<base::DictionaryValue> ParseDictionary(
131 const std::string& json) { 134 const std::string& json) {
132 std::string error; 135 std::string error;
133 std::unique_ptr<base::Value> value = base::JSONReader::ReadAndReturnError( 136 std::unique_ptr<base::Value> value = base::JSONReader::ReadAndReturnError(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 199
197 client.AddListener(&logger); 200 client.AddListener(&logger);
198 logger.OnConnected(&client); 201 logger.OnConnected(&client);
199 ExpectEnableDomains(&client); 202 ExpectEnableDomains(&client);
200 ASSERT_EQ(kOk, client.TriggerEvent("Network.gaga").code()); 203 ASSERT_EQ(kOk, client.TriggerEvent("Network.gaga").code());
201 ASSERT_EQ(kOk, client.TriggerEvent("Page.ulala").code()); 204 ASSERT_EQ(kOk, client.TriggerEvent("Page.ulala").code());
202 // Ignore -- different domain. 205 // Ignore -- different domain.
203 ASSERT_EQ(kOk, client.TriggerEvent("Console.bad").code()); 206 ASSERT_EQ(kOk, client.TriggerEvent("Console.bad").code());
204 207
205 ASSERT_EQ(2u, log.GetEntries().size()); 208 ASSERT_EQ(2u, log.GetEntries().size());
206 ValidateLogEntry(log.GetEntries()[0], "webview-1", "Network.gaga"); 209 ValidateLogEntry(log.GetEntries()[0].get(), "webview-1", "Network.gaga");
207 ValidateLogEntry(log.GetEntries()[1], "webview-1", "Page.ulala"); 210 ValidateLogEntry(log.GetEntries()[1].get(), "webview-1", "Page.ulala");
208 } 211 }
209 212
210 TEST(PerformanceLogger, TwoWebViews) { 213 TEST(PerformanceLogger, TwoWebViews) {
211 FakeDevToolsClient client1("webview-1"); 214 FakeDevToolsClient client1("webview-1");
212 FakeDevToolsClient client2("webview-2"); 215 FakeDevToolsClient client2("webview-2");
213 FakeLog log; 216 FakeLog log;
214 Session session("test"); 217 Session session("test");
215 PerformanceLogger logger(&log, &session); 218 PerformanceLogger logger(&log, &session);
216 219
217 client1.AddListener(&logger); 220 client1.AddListener(&logger);
218 client2.AddListener(&logger); 221 client2.AddListener(&logger);
219 logger.OnConnected(&client1); 222 logger.OnConnected(&client1);
220 logger.OnConnected(&client2); 223 logger.OnConnected(&client2);
221 ExpectEnableDomains(&client1); 224 ExpectEnableDomains(&client1);
222 ExpectEnableDomains(&client2); 225 ExpectEnableDomains(&client2);
223 // OnConnected sends the enable command only to that client, not others. 226 // OnConnected sends the enable command only to that client, not others.
224 client1.ConnectIfNecessary(); 227 client1.ConnectIfNecessary();
225 ExpectEnableDomains(&client1); 228 ExpectEnableDomains(&client1);
226 DevToolsCommand* cmd; 229 DevToolsCommand* cmd;
227 ASSERT_FALSE(client2.PopSentCommand(&cmd)); 230 ASSERT_FALSE(client2.PopSentCommand(&cmd));
228 231
229 ASSERT_EQ(kOk, client1.TriggerEvent("Page.gaga1").code()); 232 ASSERT_EQ(kOk, client1.TriggerEvent("Page.gaga1").code());
230 ASSERT_EQ(kOk, client2.TriggerEvent("Network.gaga2").code()); 233 ASSERT_EQ(kOk, client2.TriggerEvent("Network.gaga2").code());
231 234
232 ASSERT_EQ(2u, log.GetEntries().size()); 235 ASSERT_EQ(2u, log.GetEntries().size());
233 ValidateLogEntry(log.GetEntries()[0], "webview-1", "Page.gaga1"); 236 ValidateLogEntry(log.GetEntries()[0].get(), "webview-1", "Page.gaga1");
234 ValidateLogEntry(log.GetEntries()[1], "webview-2", "Network.gaga2"); 237 ValidateLogEntry(log.GetEntries()[1].get(), "webview-2", "Network.gaga2");
235 } 238 }
236 239
237 TEST(PerformanceLogger, PerfLoggingPrefs) { 240 TEST(PerformanceLogger, PerfLoggingPrefs) {
238 FakeDevToolsClient client("webview-1"); 241 FakeDevToolsClient client("webview-1");
239 FakeLog log; 242 FakeLog log;
240 Session session("test"); 243 Session session("test");
241 PerfLoggingPrefs prefs; 244 PerfLoggingPrefs prefs;
242 EXPECT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled, 245 EXPECT_EQ(PerfLoggingPrefs::InspectorDomainStatus::kDefaultEnabled,
243 prefs.network); 246 prefs.network);
244 prefs.network = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyDisabled; 247 prefs.network = PerfLoggingPrefs::InspectorDomainStatus::kExplicitlyDisabled;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 std::unique_ptr<base::DictionaryValue> event1(new base::DictionaryValue()); 336 std::unique_ptr<base::DictionaryValue> event1(new base::DictionaryValue());
334 event1->SetString("cat", "foo"); 337 event1->SetString("cat", "foo");
335 trace_events->Append(event1->CreateDeepCopy()); 338 trace_events->Append(event1->CreateDeepCopy());
336 std::unique_ptr<base::DictionaryValue> event2(new base::DictionaryValue()); 339 std::unique_ptr<base::DictionaryValue> event2(new base::DictionaryValue());
337 event2->SetString("cat", "bar"); 340 event2->SetString("cat", "bar");
338 trace_events->Append(event2->CreateDeepCopy()); 341 trace_events->Append(event2->CreateDeepCopy());
339 params.Set("value", trace_events); 342 params.Set("value", trace_events);
340 ASSERT_EQ(kOk, client.TriggerEvent("Tracing.dataCollected", params).code()); 343 ASSERT_EQ(kOk, client.TriggerEvent("Tracing.dataCollected", params).code());
341 344
342 ASSERT_EQ(2u, log.GetEntries().size()); 345 ASSERT_EQ(2u, log.GetEntries().size());
343 ValidateLogEntry(log.GetEntries()[0], 346 ValidateLogEntry(log.GetEntries()[0].get(),
344 DevToolsClientImpl::kBrowserwideDevToolsClientId, 347 DevToolsClientImpl::kBrowserwideDevToolsClientId,
345 "Tracing.dataCollected", *event1); 348 "Tracing.dataCollected", *event1);
346 ValidateLogEntry(log.GetEntries()[1], 349 ValidateLogEntry(log.GetEntries()[1].get(),
347 DevToolsClientImpl::kBrowserwideDevToolsClientId, 350 DevToolsClientImpl::kBrowserwideDevToolsClientId,
348 "Tracing.dataCollected", *event2); 351 "Tracing.dataCollected", *event2);
349 } 352 }
350 353
351 TEST(PerformanceLogger, ShouldRequestTraceEvents) { 354 TEST(PerformanceLogger, ShouldRequestTraceEvents) {
352 FakeBrowserwideClient client; 355 FakeBrowserwideClient client;
353 FakeLog log; 356 FakeLog log;
354 Session session("test"); 357 Session session("test");
355 PerfLoggingPrefs prefs; 358 PerfLoggingPrefs prefs;
356 prefs.trace_categories = "benchmark,blink.console"; 359 prefs.trace_categories = "benchmark,blink.console";
(...skipping 20 matching lines...) Expand all
377 prefs.trace_categories = "benchmark,blink.console"; 380 prefs.trace_categories = "benchmark,blink.console";
378 PerformanceLogger logger(&log, &session, prefs); 381 PerformanceLogger logger(&log, &session, prefs);
379 382
380 client.AddListener(&logger); 383 client.AddListener(&logger);
381 logger.OnConnected(&client); 384 logger.OnConnected(&client);
382 base::DictionaryValue params; 385 base::DictionaryValue params;
383 params.SetDouble("percentFull", 1.0); 386 params.SetDouble("percentFull", 1.0);
384 ASSERT_EQ(kOk, client.TriggerEvent("Tracing.bufferUsage", params).code()); 387 ASSERT_EQ(kOk, client.TriggerEvent("Tracing.bufferUsage", params).code());
385 388
386 ASSERT_EQ(1u, log.GetEntries().size()); 389 ASSERT_EQ(1u, log.GetEntries().size());
387 LogEntry* entry = log.GetEntries()[0]; 390 LogEntry* entry = log.GetEntries()[0].get();
388 EXPECT_EQ(Log::kWarning, entry->level); 391 EXPECT_EQ(Log::kWarning, entry->level);
389 EXPECT_LT(0, entry->timestamp.ToTimeT()); 392 EXPECT_LT(0, entry->timestamp.ToTimeT());
390 std::unique_ptr<base::DictionaryValue> message( 393 std::unique_ptr<base::DictionaryValue> message(
391 ParseDictionary(entry->message)); 394 ParseDictionary(entry->message));
392 std::string webview; 395 std::string webview;
393 EXPECT_TRUE(message->GetString("webview", &webview)); 396 EXPECT_TRUE(message->GetString("webview", &webview));
394 EXPECT_EQ(DevToolsClientImpl::kBrowserwideDevToolsClientId, webview); 397 EXPECT_EQ(DevToolsClientImpl::kBrowserwideDevToolsClientId, webview);
395 std::string method; 398 std::string method;
396 EXPECT_TRUE(message->GetString("message.method", &method)); 399 EXPECT_TRUE(message->GetString("message.method", &method));
397 EXPECT_EQ("Tracing.bufferUsage", method); 400 EXPECT_EQ("Tracing.bufferUsage", method);
398 base::DictionaryValue* actual_params; 401 base::DictionaryValue* actual_params;
399 EXPECT_TRUE(message->GetDictionary("message.params", &actual_params)); 402 EXPECT_TRUE(message->GetDictionary("message.params", &actual_params));
400 EXPECT_TRUE(actual_params->HasKey("error")); 403 EXPECT_TRUE(actual_params->HasKey("error"));
401 } 404 }
OLDNEW
« no previous file with comments | « chrome/test/chromedriver/logging_unittest.cc ('k') | chrome/test/chromedriver/session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698