OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/gpu/gpu_benchmarking_extension.h" | 5 #include "content/renderer/gpu/gpu_benchmarking_extension.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 v8::Handle<v8::Value> argv[] = { value }; | 257 v8::Handle<v8::Value> argv[] = { value }; |
258 | 258 |
259 frame->callFunctionEvenIfScriptDisabled( | 259 frame->callFunctionEvenIfScriptDisabled( |
260 callback_and_context->GetCallback(), | 260 callback_and_context->GetCallback(), |
261 v8::Object::New(isolate), | 261 v8::Object::New(isolate), |
262 1, | 262 1, |
263 argv); | 263 argv); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 void OnSnapshotCompleted(CallbackAndContext* callback_and_context, | |
268 const gfx::Size& size, | |
269 const std::vector<unsigned char>& png) { | |
270 v8::Isolate* isolate = callback_and_context->isolate(); | |
271 v8::HandleScope scope(isolate); | |
272 v8::Handle<v8::Context> context = callback_and_context->GetContext(); | |
273 v8::Context::Scope context_scope(context); | |
274 WebLocalFrame* frame = WebLocalFrame::frameForContext(context); | |
275 if (frame) { | |
276 v8::Handle<v8::Value> result; | |
277 | |
278 if (!size.IsEmpty()) { | |
279 v8::Handle<v8::Object> result_object; | |
280 result_object = v8::Object::New(isolate); | |
281 | |
282 result_object->Set(v8::String::NewFromUtf8(isolate, "width"), | |
283 v8::Number::New(isolate, size.width())); | |
284 result_object->Set(v8::String::NewFromUtf8(isolate, "height"), | |
285 v8::Number::New(isolate, size.height())); | |
286 | |
287 std::string base64_png; | |
288 base::Base64Encode( | |
289 base::StringPiece(reinterpret_cast<const char*>(&*png.begin()), | |
290 png.size()), | |
291 &base64_png); | |
292 | |
293 result_object->Set(v8::String::NewFromUtf8(isolate, "data"), | |
294 v8::String::NewFromUtf8(isolate, | |
295 base64_png.c_str(), | |
296 v8::String::kNormalString, | |
297 base64_png.size())); | |
298 | |
299 result = result_object; | |
300 } else { | |
301 result = v8::Null(isolate); | |
302 } | |
303 | |
304 v8::Handle<v8::Value> argv[] = {result}; | |
305 | |
306 frame->callFunctionEvenIfScriptDisabled( | |
307 callback_and_context->GetCallback(), v8::Object::New(isolate), 1, argv); | |
308 } | |
309 } | |
310 | |
311 void OnSyntheticGestureCompleted(CallbackAndContext* callback_and_context) { | 267 void OnSyntheticGestureCompleted(CallbackAndContext* callback_and_context) { |
312 v8::Isolate* isolate = callback_and_context->isolate(); | 268 v8::Isolate* isolate = callback_and_context->isolate(); |
313 v8::HandleScope scope(isolate); | 269 v8::HandleScope scope(isolate); |
314 v8::Handle<v8::Context> context = callback_and_context->GetContext(); | 270 v8::Handle<v8::Context> context = callback_and_context->GetContext(); |
315 v8::Context::Scope context_scope(context); | 271 v8::Context::Scope context_scope(context); |
316 WebLocalFrame* frame = WebLocalFrame::frameForContext(context); | 272 WebLocalFrame* frame = WebLocalFrame::frameForContext(context); |
317 if (frame) { | 273 if (frame) { |
318 frame->callFunctionEvenIfScriptDisabled( | 274 frame->callFunctionEvenIfScriptDisabled( |
319 callback_and_context->GetCallback(), v8::Object::New(isolate), 0, NULL); | 275 callback_and_context->GetCallback(), v8::Object::New(isolate), 0, NULL); |
320 } | 276 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 &GpuBenchmarking::GestureSourceTypeSupported) | 437 &GpuBenchmarking::GestureSourceTypeSupported) |
482 .SetMethod("smoothScrollBy", &GpuBenchmarking::SmoothScrollBy) | 438 .SetMethod("smoothScrollBy", &GpuBenchmarking::SmoothScrollBy) |
483 .SetMethod("smoothDrag", &GpuBenchmarking::SmoothDrag) | 439 .SetMethod("smoothDrag", &GpuBenchmarking::SmoothDrag) |
484 .SetMethod("swipe", &GpuBenchmarking::Swipe) | 440 .SetMethod("swipe", &GpuBenchmarking::Swipe) |
485 .SetMethod("scrollBounce", &GpuBenchmarking::ScrollBounce) | 441 .SetMethod("scrollBounce", &GpuBenchmarking::ScrollBounce) |
486 // TODO(dominikg): Remove once JS interface changes have rolled into | 442 // TODO(dominikg): Remove once JS interface changes have rolled into |
487 // stable. | 443 // stable. |
488 .SetValue("newPinchInterface", true) | 444 .SetValue("newPinchInterface", true) |
489 .SetMethod("pinchBy", &GpuBenchmarking::PinchBy) | 445 .SetMethod("pinchBy", &GpuBenchmarking::PinchBy) |
490 .SetMethod("tap", &GpuBenchmarking::Tap) | 446 .SetMethod("tap", &GpuBenchmarking::Tap) |
491 .SetMethod("beginWindowSnapshotPNG", | |
492 &GpuBenchmarking::BeginWindowSnapshotPNG) | |
493 .SetMethod("clearImageCache", &GpuBenchmarking::ClearImageCache) | 447 .SetMethod("clearImageCache", &GpuBenchmarking::ClearImageCache) |
494 .SetMethod("runMicroBenchmark", &GpuBenchmarking::RunMicroBenchmark) | 448 .SetMethod("runMicroBenchmark", &GpuBenchmarking::RunMicroBenchmark) |
495 .SetMethod("sendMessageToMicroBenchmark", | 449 .SetMethod("sendMessageToMicroBenchmark", |
496 &GpuBenchmarking::SendMessageToMicroBenchmark) | 450 &GpuBenchmarking::SendMessageToMicroBenchmark) |
497 .SetMethod("hasGpuProcess", &GpuBenchmarking::HasGpuProcess); | 451 .SetMethod("hasGpuProcess", &GpuBenchmarking::HasGpuProcess); |
498 } | 452 } |
499 | 453 |
500 void GpuBenchmarking::SetNeedsDisplayOnAllLayers() { | 454 void GpuBenchmarking::SetNeedsDisplayOnAllLayers() { |
501 GpuBenchmarkingContext context; | 455 GpuBenchmarkingContext context; |
502 if (!context.Init(true)) | 456 if (!context.Init(true)) |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 // TODO(nduca): If the render_view_impl is destroyed while the gesture is in | 776 // TODO(nduca): If the render_view_impl is destroyed while the gesture is in |
823 // progress, we will leak the callback and context. This needs to be fixed, | 777 // progress, we will leak the callback and context. This needs to be fixed, |
824 // somehow. | 778 // somehow. |
825 context.render_view_impl()->QueueSyntheticGesture( | 779 context.render_view_impl()->QueueSyntheticGesture( |
826 gesture_params.Pass(), | 780 gesture_params.Pass(), |
827 base::Bind(&OnSyntheticGestureCompleted, callback_and_context)); | 781 base::Bind(&OnSyntheticGestureCompleted, callback_and_context)); |
828 | 782 |
829 return true; | 783 return true; |
830 } | 784 } |
831 | 785 |
832 void GpuBenchmarking::BeginWindowSnapshotPNG( | |
833 v8::Isolate* isolate, | |
834 v8::Handle<v8::Function> callback) { | |
835 GpuBenchmarkingContext context; | |
836 if (!context.Init(false)) | |
837 return; | |
838 | |
839 scoped_refptr<CallbackAndContext> callback_and_context = | |
840 new CallbackAndContext(isolate, | |
841 callback, | |
842 context.web_frame()->mainWorldScriptContext()); | |
843 | |
844 context.render_view_impl()->GetWindowSnapshot( | |
845 base::Bind(&OnSnapshotCompleted, callback_and_context)); | |
846 } | |
847 | |
848 void GpuBenchmarking::ClearImageCache() { | 786 void GpuBenchmarking::ClearImageCache() { |
849 WebImageCache::clear(); | 787 WebImageCache::clear(); |
850 } | 788 } |
851 | 789 |
852 int GpuBenchmarking::RunMicroBenchmark(gin::Arguments* args) { | 790 int GpuBenchmarking::RunMicroBenchmark(gin::Arguments* args) { |
853 GpuBenchmarkingContext context; | 791 GpuBenchmarkingContext context; |
854 if (!context.Init(true)) | 792 if (!context.Init(true)) |
855 return 0; | 793 return 0; |
856 | 794 |
857 std::string name; | 795 std::string name; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 | 834 |
897 return context.compositor()->SendMessageToMicroBenchmark(id, value.Pass()); | 835 return context.compositor()->SendMessageToMicroBenchmark(id, value.Pass()); |
898 } | 836 } |
899 | 837 |
900 bool GpuBenchmarking::HasGpuProcess() { | 838 bool GpuBenchmarking::HasGpuProcess() { |
901 GpuChannelHost* gpu_channel = RenderThreadImpl::current()->GetGpuChannel(); | 839 GpuChannelHost* gpu_channel = RenderThreadImpl::current()->GetGpuChannel(); |
902 return !!gpu_channel; | 840 return !!gpu_channel; |
903 } | 841 } |
904 | 842 |
905 } // namespace content | 843 } // namespace content |
OLD | NEW |