Chromium Code Reviews| Index: chrome/renderer/benchmarking_extension.cc |
| diff --git a/chrome/renderer/benchmarking_extension.cc b/chrome/renderer/benchmarking_extension.cc |
| index d6eb831fad1647a1ebcf4b090a32cde3b1bc4c54..b87fa7fd69008c3f7e8fb42c50b7e1b94056fc8e 100644 |
| --- a/chrome/renderer/benchmarking_extension.cc |
| +++ b/chrome/renderer/benchmarking_extension.cc |
| @@ -10,13 +10,38 @@ |
| #include "chrome/common/benchmarking_messages.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/renderer/render_thread.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebRenderingBenchmarkResults.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebCache.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| #include "v8/include/v8.h" |
| using WebKit::WebCache; |
| +using WebKit::WebFrame; |
| +using WebKit::WebView; |
| const char kBenchmarkingExtensionName[] = "v8/Benchmarking"; |
| +// Benchmark results object that populates a json array |
|
nduca
2012/06/12 17:42:09
Comments end with periods. Also, note its not a js
dmurph
2012/06/14 02:20:13
Done.
|
| +class JsonBenchmarkResults : public WebRenderingBenchmarkResults { |
|
nduca
2012/06/12 17:42:09
V8BenchmarkResults
dmurph
2012/06/14 02:20:13
Done.
|
| + public: |
| + explicit JsonBenchmarkResults(v8::Handle<v8::Array> results_array) |
| + : curr_result_index_(0), results_array_(results_array) { } |
|
nduca
2012/06/12 17:42:09
check goog c++ style guide, this feels too compact
|
| + virtual ~JsonBenchmarkResults() {} |
| + |
| + void addResult(const char *name, const char* unit, double resultValue) { |
| + v8::Handle<v8::Object> result = v8::Object::New(); |
| + result->Set(v8::String::New("benchmark", 9), v8::String::New(name, -1)); |
| + result->Set(v8::String::New("unit", 4), v8::String::New(unit, -1)); |
| + result->Set(v8::String::New("time", 4), v8::Number::New(resultValue)); |
| + results_array_->Set(curr_result_index_++, result); |
| + } |
| + |
| + private: |
| + unsigned int curr_result_index_; |
|
nduca
2012/06/12 17:42:09
cur_result_index_. Not sure if this is the standar
dmurph
2012/06/14 02:20:13
Couldn't find a 'push', but instead of having that
|
| + v8::Handle<v8::Array> results_array_; |
| +}; |
| + |
| namespace extensions_v8 { |
| class BenchmarkingWrapper : public v8::Extension { |
| @@ -57,6 +82,10 @@ class BenchmarkingWrapper : public v8::Extension { |
| " native function IsSingleProcess();" |
| " return IsSingleProcess();" |
| "};" |
| + "chrome.benchmarking.runRenderingBenchmarks = function() {" |
| + " native function RunRenderingBenchmarks();" |
| + " return RunRenderingBenchmarks();" |
| + "};" |
| "chrome.Interval = function() {" |
| " var start_ = 0;" |
| " var stop_ = 0;" |
| @@ -97,6 +126,8 @@ class BenchmarkingWrapper : public v8::Extension { |
| return v8::FunctionTemplate::New(IsSingleProcess); |
| } else if (name->Equals(v8::String::New("HiResTime"))) { |
| return v8::FunctionTemplate::New(HiResTime); |
| + } else if (name->Equals(v8::String::New("RunRenderingBenchmarks"))) { |
| + return v8::FunctionTemplate::New(RunRenderingBenchmarks); |
| } |
| return v8::Handle<v8::FunctionTemplate>(); |
| @@ -167,6 +198,25 @@ class BenchmarkingWrapper : public v8::Extension { |
| return v8::Number::New( |
| static_cast<double>(base::TimeTicks::HighResNow().ToInternalValue())); |
| } |
| + |
| + static v8::Handle<v8::Value> RunRenderingBenchmarks( |
| + const v8::Arguments& args) { |
| + WebFrame* web_frame = WebFrame::frameForEnteredContext(); |
| + if (!web_frame) |
| + return v8::Undefined(); |
| + |
| + WebView* web_view = web_frame->view(); |
| + if (!web_view) |
| + return v8::Undefined(); |
| + |
| + v8::Handle<v8::Array> resultsArray = v8::Array::New(0); |
| + |
| + JsonBenchmarkResults* results = new JsonBenchmarkResults(resultsArray); |
|
nduca
2012/06/12 17:42:09
This looks good. But, where did we end up with Dar
dmurph
2012/06/14 02:20:13
I'm including it now, I just hadn't made it yet fo
|
| + web_view->runRenderingBenchmarks(*results); |
| + delete results; |
| + |
| + return resultsArray; |
| + } |
| }; |
| v8::Extension* BenchmarkingExtension::Get() { |