OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/renderer/benchmarking_extension.h" | 5 #include "chrome/renderer/benchmarking_extension.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/metrics/stats_table.h" | 8 #include "base/metrics/stats_table.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "chrome/common/benchmarking_messages.h" | 10 #include "chrome/common/benchmarking_messages.h" |
11 #include "content/public/common/content_switches.h" | 11 #include "content/public/common/content_switches.h" |
12 #include "content/public/renderer/render_thread.h" | 12 #include "content/public/renderer/render_thread.h" |
13 #include "content/public/renderer/render_view.h" | |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" | 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" |
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | |
16 #include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h " | |
14 #include "v8/include/v8.h" | 17 #include "v8/include/v8.h" |
15 | 18 |
16 using WebKit::WebCache; | 19 using WebKit::WebCache; |
20 using WebKit::WebFrame; | |
21 using WebKit::WebView; | |
22 using WebKit::WebRenderingStats; | |
17 | 23 |
18 const char kBenchmarkingExtensionName[] = "v8/Benchmarking"; | 24 const char kBenchmarkingExtensionName[] = "v8/Benchmarking"; |
19 | 25 |
20 namespace extensions_v8 { | 26 namespace extensions_v8 { |
21 | 27 |
22 class BenchmarkingWrapper : public v8::Extension { | 28 class BenchmarkingWrapper : public v8::Extension { |
23 public: | 29 public: |
24 BenchmarkingWrapper() : | 30 BenchmarkingWrapper() : |
25 v8::Extension(kBenchmarkingExtensionName, | 31 v8::Extension(kBenchmarkingExtensionName, |
26 "if (typeof(chrome) == 'undefined') {" | 32 "if (typeof(chrome) == 'undefined') {" |
(...skipping 23 matching lines...) Expand all Loading... | |
50 " return GetCounter(name);" | 56 " return GetCounter(name);" |
51 "};" | 57 "};" |
52 "chrome.benchmarking.enableSpdy = function(name) {" | 58 "chrome.benchmarking.enableSpdy = function(name) {" |
53 " native function EnableSpdy();" | 59 " native function EnableSpdy();" |
54 " EnableSpdy(name);" | 60 " EnableSpdy(name);" |
55 "};" | 61 "};" |
56 "chrome.benchmarking.isSingleProcess = function() {" | 62 "chrome.benchmarking.isSingleProcess = function() {" |
57 " native function IsSingleProcess();" | 63 " native function IsSingleProcess();" |
58 " return IsSingleProcess();" | 64 " return IsSingleProcess();" |
59 "};" | 65 "};" |
66 "chrome.benchmarking.renderingStats = function() {" | |
67 " native function RenderingStats();" | |
nduca
2012/06/15 00:26:22
We want to move these changes to gpu_benchmarking_
dtu
2012/06/20 00:57:32
Done.
| |
68 " return RenderingStats();" | |
69 "};" | |
60 "chrome.Interval = function() {" | 70 "chrome.Interval = function() {" |
61 " var start_ = 0;" | 71 " var start_ = 0;" |
62 " var stop_ = 0;" | 72 " var stop_ = 0;" |
63 " native function HiResTime();" | 73 " native function HiResTime();" |
64 " this.start = function() {" | 74 " this.start = function() {" |
65 " stop_ = 0;" | 75 " stop_ = 0;" |
66 " start_ = HiResTime();" | 76 " start_ = HiResTime();" |
67 " };" | 77 " };" |
68 " this.stop = function() {" | 78 " this.stop = function() {" |
69 " stop_ = HiResTime();" | 79 " stop_ = HiResTime();" |
(...skipping 18 matching lines...) Expand all Loading... | |
88 } else if (name->Equals(v8::String::New("ClearHostResolverCache"))) { | 98 } else if (name->Equals(v8::String::New("ClearHostResolverCache"))) { |
89 return v8::FunctionTemplate::New(ClearHostResolverCache); | 99 return v8::FunctionTemplate::New(ClearHostResolverCache); |
90 } else if (name->Equals(v8::String::New("ClearPredictorCache"))) { | 100 } else if (name->Equals(v8::String::New("ClearPredictorCache"))) { |
91 return v8::FunctionTemplate::New(ClearPredictorCache); | 101 return v8::FunctionTemplate::New(ClearPredictorCache); |
92 } else if (name->Equals(v8::String::New("EnableSpdy"))) { | 102 } else if (name->Equals(v8::String::New("EnableSpdy"))) { |
93 return v8::FunctionTemplate::New(EnableSpdy); | 103 return v8::FunctionTemplate::New(EnableSpdy); |
94 } else if (name->Equals(v8::String::New("GetCounter"))) { | 104 } else if (name->Equals(v8::String::New("GetCounter"))) { |
95 return v8::FunctionTemplate::New(GetCounter); | 105 return v8::FunctionTemplate::New(GetCounter); |
96 } else if (name->Equals(v8::String::New("IsSingleProcess"))) { | 106 } else if (name->Equals(v8::String::New("IsSingleProcess"))) { |
97 return v8::FunctionTemplate::New(IsSingleProcess); | 107 return v8::FunctionTemplate::New(IsSingleProcess); |
108 } else if (name->Equals(v8::String::New("RenderingStats"))) { | |
109 return v8::FunctionTemplate::New(RenderingStats); | |
98 } else if (name->Equals(v8::String::New("HiResTime"))) { | 110 } else if (name->Equals(v8::String::New("HiResTime"))) { |
99 return v8::FunctionTemplate::New(HiResTime); | 111 return v8::FunctionTemplate::New(HiResTime); |
100 } | 112 } |
101 | 113 |
102 return v8::Handle<v8::FunctionTemplate>(); | 114 return v8::Handle<v8::FunctionTemplate>(); |
103 } | 115 } |
104 | 116 |
105 static v8::Handle<v8::Value> CloseConnections(const v8::Arguments& args) { | 117 static v8::Handle<v8::Value> CloseConnections(const v8::Arguments& args) { |
106 content::RenderThread::Get()->Send( | 118 content::RenderThread::Get()->Send( |
107 new ChromeViewHostMsg_CloseCurrentConnections()); | 119 new ChromeViewHostMsg_CloseCurrentConnections()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
156 | 168 |
157 int counter = base::StatsTable::current()->GetCounterValue(name); | 169 int counter = base::StatsTable::current()->GetCounterValue(name); |
158 return v8::Integer::New(counter); | 170 return v8::Integer::New(counter); |
159 } | 171 } |
160 | 172 |
161 static v8::Handle<v8::Value> IsSingleProcess(const v8::Arguments& args) { | 173 static v8::Handle<v8::Value> IsSingleProcess(const v8::Arguments& args) { |
162 return v8::Boolean::New( | 174 return v8::Boolean::New( |
163 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)); | 175 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)); |
164 } | 176 } |
165 | 177 |
178 static v8::Handle<v8::Value> RenderingStats(const v8::Arguments& args) { | |
179 WebFrame* web_frame = WebFrame::frameForEnteredContext(); | |
180 if (!web_frame) | |
181 return v8::Undefined(); | |
182 | |
183 WebView* web_view = web_frame->view(); | |
184 if (!web_view) | |
185 return v8::Undefined(); | |
186 | |
187 content::RenderView* render_view = | |
188 content::RenderView::FromWebView(web_view); | |
189 if (!render_view) | |
190 return v8::Undefined(); | |
191 | |
192 WebRenderingStats stats; | |
193 render_view->GetRenderingStats(stats); | |
194 | |
nduca
2012/06/15 00:26:22
/me wonders if there's a way to get the fields of
| |
195 v8::Handle<v8::Object> stats_object = v8::Object::New(); | |
196 if (stats.frameNumber) | |
197 stats_object->Set(v8::String::New("frameNumber"), | |
198 v8::Integer::New(stats.frameNumber), v8::ReadOnly); | |
199 if (stats.implFrameNumber) | |
200 stats_object->Set(v8::String::New("implFrameNumber"), | |
201 v8::Integer::New(stats.implFrameNumber), v8::ReadOnly); | |
202 return stats_object; | |
203 } | |
204 | |
166 static v8::Handle<v8::Value> HiResTime(const v8::Arguments& args) { | 205 static v8::Handle<v8::Value> HiResTime(const v8::Arguments& args) { |
167 return v8::Number::New( | 206 return v8::Number::New( |
168 static_cast<double>(base::TimeTicks::HighResNow().ToInternalValue())); | 207 static_cast<double>(base::TimeTicks::HighResNow().ToInternalValue())); |
169 } | 208 } |
170 }; | 209 }; |
171 | 210 |
172 v8::Extension* BenchmarkingExtension::Get() { | 211 v8::Extension* BenchmarkingExtension::Get() { |
173 return new BenchmarkingWrapper(); | 212 return new BenchmarkingWrapper(); |
174 } | 213 } |
175 | 214 |
176 } // namespace extensions_v8 | 215 } // namespace extensions_v8 |
OLD | NEW |