Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 } | 330 } |
| 331 | 331 |
| 332 bool BeginSmoothScroll(v8::Isolate* isolate, | 332 bool BeginSmoothScroll(v8::Isolate* isolate, |
| 333 float pixels_to_scroll, | 333 float pixels_to_scroll, |
| 334 v8::Local<v8::Function> callback, | 334 v8::Local<v8::Function> callback, |
| 335 int gesture_source_type, | 335 int gesture_source_type, |
| 336 const std::string& direction, | 336 const std::string& direction, |
| 337 float speed_in_pixels_s, | 337 float speed_in_pixels_s, |
| 338 bool prevent_fling, | 338 bool prevent_fling, |
| 339 float start_x, | 339 float start_x, |
| 340 float start_y) { | 340 float start_y, |
| 341 float velocity_x = 0, | |
| 342 float velocity_y = 0) { | |
| 341 GpuBenchmarkingContext context; | 343 GpuBenchmarkingContext context; |
| 342 if (!context.Init(false)) | 344 if (!context.Init(false)) |
| 343 return false; | 345 return false; |
| 344 | 346 |
| 345 // Convert coordinates from CSS pixels to density independent pixels (DIPs). | 347 // Convert coordinates from CSS pixels to density independent pixels (DIPs). |
| 346 float page_scale_factor = context.web_view()->pageScaleFactor(); | 348 float page_scale_factor = context.web_view()->pageScaleFactor(); |
| 347 | 349 |
| 348 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT) { | 350 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT) { |
| 349 // Ensure the mouse is centered and visible, in case it will | 351 // Ensure the mouse is centered and visible, in case it will |
| 350 // trigger any hover or mousemove effects. | 352 // trigger any hover or mousemove effects. |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 376 static_cast<SyntheticGestureParams::GestureSourceType>( | 378 static_cast<SyntheticGestureParams::GestureSourceType>( |
| 377 gesture_source_type); | 379 gesture_source_type); |
| 378 | 380 |
| 379 gesture_params->speed_in_pixels_s = speed_in_pixels_s; | 381 gesture_params->speed_in_pixels_s = speed_in_pixels_s; |
| 380 gesture_params->prevent_fling = prevent_fling; | 382 gesture_params->prevent_fling = prevent_fling; |
| 381 | 383 |
| 382 gesture_params->anchor.SetPoint(start_x * page_scale_factor, | 384 gesture_params->anchor.SetPoint(start_x * page_scale_factor, |
| 383 start_y * page_scale_factor); | 385 start_y * page_scale_factor); |
| 384 | 386 |
| 385 float distance_length = pixels_to_scroll * page_scale_factor; | 387 float distance_length = pixels_to_scroll * page_scale_factor; |
| 388 | |
| 389 bool set_velocity = | |
| 390 gesture_source_type == SyntheticGestureParams::MOUSE_INPUT && | |
| 391 !prevent_fling; | |
| 392 | |
| 393 DCHECK(!set_velocity || velocity_x || velocity_y); | |
| 394 if (set_velocity && !velocity_x && !velocity_y) | |
|
bokan
2017/03/10 14:41:57
Ditto here for the DCHECK and |if|
sahel
2017/03/10 21:51:41
Done.
| |
| 395 return false; | |
| 396 | |
| 397 gfx::Vector2dF velocity; | |
| 386 gfx::Vector2dF distance; | 398 gfx::Vector2dF distance; |
| 387 if (direction == "down") | 399 |
| 400 if (direction == "down") { | |
|
bokan
2017/03/10 14:41:57
Question: do we really need this direction paramet
sahel
2017/03/10 21:51:41
I am not sure why we have it here, but one reason
| |
| 388 distance.set_y(-distance_length); | 401 distance.set_y(-distance_length); |
| 389 else if (direction == "up") | 402 velocity.set_y(set_velocity ? -velocity_y : 0); |
| 403 } else if (direction == "up") { | |
| 390 distance.set_y(distance_length); | 404 distance.set_y(distance_length); |
| 391 else if (direction == "right") | 405 velocity.set_y(set_velocity ? velocity_y : 0); |
| 406 } else if (direction == "right") { | |
| 392 distance.set_x(-distance_length); | 407 distance.set_x(-distance_length); |
| 393 else if (direction == "left") | 408 velocity.set_x(set_velocity ? -velocity_x : 0); |
| 409 } else if (direction == "left") { | |
| 394 distance.set_x(distance_length); | 410 distance.set_x(distance_length); |
| 395 else if (direction == "upleft") { | 411 velocity.set_x(set_velocity ? velocity_x : 0); |
| 412 } else if (direction == "upleft") { | |
| 396 distance.set_y(distance_length); | 413 distance.set_y(distance_length); |
| 397 distance.set_x(distance_length); | 414 distance.set_x(distance_length); |
| 415 velocity.set_y(set_velocity ? velocity_y : 0); | |
| 416 velocity.set_x(set_velocity ? velocity_x : 0); | |
| 398 } else if (direction == "upright") { | 417 } else if (direction == "upright") { |
| 399 distance.set_y(distance_length); | 418 distance.set_y(distance_length); |
| 400 distance.set_x(-distance_length); | 419 distance.set_x(-distance_length); |
| 420 velocity.set_y(set_velocity ? velocity_y : 0); | |
| 421 velocity.set_x(set_velocity ? -velocity_x : 0); | |
| 401 } else if (direction == "downleft") { | 422 } else if (direction == "downleft") { |
| 402 distance.set_y(-distance_length); | 423 distance.set_y(-distance_length); |
| 403 distance.set_x(distance_length); | 424 distance.set_x(distance_length); |
| 425 velocity.set_y(set_velocity ? -velocity_y : 0); | |
| 426 velocity.set_x(set_velocity ? velocity_x : 0); | |
| 404 } else if (direction == "downright") { | 427 } else if (direction == "downright") { |
| 405 distance.set_y(-distance_length); | 428 distance.set_y(-distance_length); |
| 406 distance.set_x(-distance_length); | 429 distance.set_x(-distance_length); |
| 430 velocity.set_y(set_velocity ? -velocity_y : 0); | |
| 431 velocity.set_x(set_velocity ? -velocity_x : 0); | |
| 407 } else { | 432 } else { |
| 408 return false; | 433 return false; |
| 409 } | 434 } |
| 435 | |
| 410 gesture_params->distances.push_back(distance); | 436 gesture_params->distances.push_back(distance); |
| 437 gesture_params->velocity = velocity; | |
| 411 | 438 |
| 412 // TODO(678879): If the render_view_impl is destroyed while the gesture is in | 439 // TODO(678879): If the render_view_impl is destroyed while the gesture is in |
| 413 // progress, we will leak the callback and context. This needs to be fixed, | 440 // progress, we will leak the callback and context. This needs to be fixed, |
| 414 // somehow, see https://crbug.com/678879. | 441 // somehow, see https://crbug.com/678879. |
| 415 context.render_view_impl()->GetWidget()->QueueSyntheticGesture( | 442 context.render_view_impl()->GetWidget()->QueueSyntheticGesture( |
| 416 std::move(gesture_params), | 443 std::move(gesture_params), |
| 417 base::Bind(&OnSyntheticGestureCompleted, | 444 base::Bind(&OnSyntheticGestureCompleted, |
| 418 base::RetainedRef(callback_and_context))); | 445 base::RetainedRef(callback_and_context))); |
| 419 | 446 |
| 420 return true; | 447 return true; |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 715 } | 742 } |
| 716 | 743 |
| 717 bool GpuBenchmarking::Swipe(gin::Arguments* args) { | 744 bool GpuBenchmarking::Swipe(gin::Arguments* args) { |
| 718 GpuBenchmarkingContext context; | 745 GpuBenchmarkingContext context; |
| 719 if (!context.Init(true)) | 746 if (!context.Init(true)) |
| 720 return false; | 747 return false; |
| 721 | 748 |
| 722 float page_scale_factor = context.web_view()->pageScaleFactor(); | 749 float page_scale_factor = context.web_view()->pageScaleFactor(); |
| 723 blink::WebRect rect = context.render_view_impl()->GetWidget()->viewRect(); | 750 blink::WebRect rect = context.render_view_impl()->GetWidget()->viewRect(); |
| 724 | 751 |
| 725 std::string direction = "up"; | 752 std::string direction = "down"; |
| 726 float pixels_to_scroll = 0; | 753 float pixels_to_scroll = 0; |
| 727 v8::Local<v8::Function> callback; | 754 v8::Local<v8::Function> callback; |
| 728 float start_x = rect.width / (page_scale_factor * 2); | 755 float start_x = rect.width / (page_scale_factor * 2); |
| 729 float start_y = rect.height / (page_scale_factor * 2); | 756 float start_y = rect.height / (page_scale_factor * 2); |
| 730 float speed_in_pixels_s = 800; | 757 float speed_in_pixels_s = 800; |
| 758 int gesture_source_type = SyntheticGestureParams::DEFAULT_INPUT; | |
| 759 float velocity_x = 0; | |
| 760 float velocity_y = 0; | |
| 731 | 761 |
| 732 if (!GetOptionalArg(args, &direction) || | 762 if (!GetOptionalArg(args, &direction) || |
| 733 !GetOptionalArg(args, &pixels_to_scroll) || | 763 !GetOptionalArg(args, &pixels_to_scroll) || |
| 734 !GetOptionalArg(args, &callback) || | 764 !GetOptionalArg(args, &callback) || |
| 735 !GetOptionalArg(args, &start_x) || | 765 !GetOptionalArg(args, &start_x) || |
| 736 !GetOptionalArg(args, &start_y) || | 766 !GetOptionalArg(args, &start_y) || |
| 737 !GetOptionalArg(args, &speed_in_pixels_s)) { | 767 !GetOptionalArg(args, &speed_in_pixels_s)) { |
| 738 return false; | 768 return false; |
| 739 } | 769 } |
| 740 | 770 |
| 771 // If no gesture source type is provided, do a touch swipe by default. | |
| 772 if (!GetOptionalArg(args, &gesture_source_type)) { | |
| 773 gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; | |
| 774 } | |
| 775 | |
| 776 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT && | |
| 777 (!GetOptionalArg(args, &velocity_x) || | |
| 778 !GetOptionalArg(args, &velocity_y))) { | |
| 779 return false; | |
| 780 } | |
| 781 | |
| 782 float direction_adjustment = SyntheticGestureParams::TOUCH_INPUT ? 1 : -1; | |
| 741 return BeginSmoothScroll(args->isolate(), | 783 return BeginSmoothScroll(args->isolate(), |
| 742 -pixels_to_scroll, | 784 direction_adjustment * pixels_to_scroll, callback, |
| 743 callback, | 785 gesture_source_type, direction, speed_in_pixels_s, |
| 744 1, // TOUCH_INPUT | 786 false, start_x, start_y, velocity_x, velocity_y); |
| 745 direction, | |
| 746 speed_in_pixels_s, | |
| 747 false, | |
| 748 start_x, | |
| 749 start_y); | |
| 750 } | 787 } |
| 751 | 788 |
| 752 bool GpuBenchmarking::ScrollBounce(gin::Arguments* args) { | 789 bool GpuBenchmarking::ScrollBounce(gin::Arguments* args) { |
| 753 GpuBenchmarkingContext context; | 790 GpuBenchmarkingContext context; |
| 754 if (!context.Init(false)) | 791 if (!context.Init(false)) |
| 755 return false; | 792 return false; |
| 756 | 793 |
| 757 float page_scale_factor = context.web_view()->pageScaleFactor(); | 794 float page_scale_factor = context.web_view()->pageScaleFactor(); |
| 758 blink::WebRect rect = context.render_view_impl()->GetWidget()->viewRect(); | 795 blink::WebRect rect = context.render_view_impl()->GetWidget()->viewRect(); |
| 759 | 796 |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1100 &gpu_driver_bug_workarounds))) { | 1137 &gpu_driver_bug_workarounds))) { |
| 1101 return; | 1138 return; |
| 1102 } | 1139 } |
| 1103 | 1140 |
| 1104 v8::Local<v8::Value> result; | 1141 v8::Local<v8::Value> result; |
| 1105 if (gin::TryConvertToV8(args->isolate(), gpu_driver_bug_workarounds, &result)) | 1142 if (gin::TryConvertToV8(args->isolate(), gpu_driver_bug_workarounds, &result)) |
| 1106 args->Return(result); | 1143 args->Return(result); |
| 1107 } | 1144 } |
| 1108 | 1145 |
| 1109 } // namespace content | 1146 } // namespace content |
| OLD | NEW |