Chromium Code Reviews| 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 |