| 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 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 } | 334 } |
| 335 | 335 |
| 336 bool BeginSmoothScroll(v8::Isolate* isolate, | 336 bool BeginSmoothScroll(v8::Isolate* isolate, |
| 337 float pixels_to_scroll, | 337 float pixels_to_scroll, |
| 338 v8::Local<v8::Function> callback, | 338 v8::Local<v8::Function> callback, |
| 339 int gesture_source_type, | 339 int gesture_source_type, |
| 340 const std::string& direction, | 340 const std::string& direction, |
| 341 float speed_in_pixels_s, | 341 float speed_in_pixels_s, |
| 342 bool prevent_fling, | 342 bool prevent_fling, |
| 343 float start_x, | 343 float start_x, |
| 344 float start_y) { | 344 float start_y, |
| 345 float velocity_x = 0, |
| 346 float velocity_y = 0) { |
| 345 GpuBenchmarkingContext context; | 347 GpuBenchmarkingContext context; |
| 346 if (!context.Init(false)) | 348 if (!context.Init(false)) |
| 347 return false; | 349 return false; |
| 348 | 350 |
| 349 // Convert coordinates from CSS pixels to density independent pixels (DIPs). | 351 // Convert coordinates from CSS pixels to density independent pixels (DIPs). |
| 350 float page_scale_factor = context.web_view()->PageScaleFactor(); | 352 float page_scale_factor = context.web_view()->PageScaleFactor(); |
| 351 | 353 |
| 352 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT) { | 354 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT) { |
| 353 // Ensure the mouse is centered and visible, in case it will | 355 // Ensure the mouse is centered and visible, in case it will |
| 354 // trigger any hover or mousemove effects. | 356 // trigger any hover or mousemove effects. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 381 static_cast<SyntheticGestureParams::GestureSourceType>( | 383 static_cast<SyntheticGestureParams::GestureSourceType>( |
| 382 gesture_source_type); | 384 gesture_source_type); |
| 383 | 385 |
| 384 gesture_params->speed_in_pixels_s = speed_in_pixels_s; | 386 gesture_params->speed_in_pixels_s = speed_in_pixels_s; |
| 385 gesture_params->prevent_fling = prevent_fling; | 387 gesture_params->prevent_fling = prevent_fling; |
| 386 | 388 |
| 387 gesture_params->anchor.SetPoint(start_x * page_scale_factor, | 389 gesture_params->anchor.SetPoint(start_x * page_scale_factor, |
| 388 start_y * page_scale_factor); | 390 start_y * page_scale_factor); |
| 389 | 391 |
| 390 float distance_length = pixels_to_scroll * page_scale_factor; | 392 float distance_length = pixels_to_scroll * page_scale_factor; |
| 393 |
| 394 bool set_velocity = |
| 395 gesture_source_type == SyntheticGestureParams::MOUSE_INPUT && |
| 396 !prevent_fling; |
| 397 |
| 398 if (set_velocity && !velocity_x && !velocity_y) |
| 399 return false; |
| 400 |
| 401 gfx::Vector2dF velocity(0, 0); |
| 391 gfx::Vector2dF distance; | 402 gfx::Vector2dF distance; |
| 392 if (direction == "down") | 403 |
| 404 if (direction == "down") { |
| 393 distance.set_y(-distance_length); | 405 distance.set_y(-distance_length); |
| 394 else if (direction == "up") | 406 velocity.set_y(-velocity_y); |
| 407 } else if (direction == "up") { |
| 395 distance.set_y(distance_length); | 408 distance.set_y(distance_length); |
| 396 else if (direction == "right") | 409 velocity.set_y(velocity_y); |
| 410 } else if (direction == "right") { |
| 397 distance.set_x(-distance_length); | 411 distance.set_x(-distance_length); |
| 398 else if (direction == "left") | 412 velocity.set_x(-velocity_x); |
| 413 } else if (direction == "left") { |
| 399 distance.set_x(distance_length); | 414 distance.set_x(distance_length); |
| 400 else if (direction == "upleft") { | 415 velocity.set_x(velocity_x); |
| 416 } else if (direction == "upleft") { |
| 401 distance.set_y(distance_length); | 417 distance.set_y(distance_length); |
| 402 distance.set_x(distance_length); | 418 distance.set_x(distance_length); |
| 419 velocity.set_y(velocity_y); |
| 420 velocity.set_x(velocity_x); |
| 403 } else if (direction == "upright") { | 421 } else if (direction == "upright") { |
| 404 distance.set_y(distance_length); | 422 distance.set_y(distance_length); |
| 405 distance.set_x(-distance_length); | 423 distance.set_x(-distance_length); |
| 424 velocity.set_y(velocity_y); |
| 425 velocity.set_x(-velocity_x); |
| 406 } else if (direction == "downleft") { | 426 } else if (direction == "downleft") { |
| 407 distance.set_y(-distance_length); | 427 distance.set_y(-distance_length); |
| 408 distance.set_x(distance_length); | 428 distance.set_x(distance_length); |
| 429 velocity.set_y(-velocity_y); |
| 430 velocity.set_x(velocity_x); |
| 409 } else if (direction == "downright") { | 431 } else if (direction == "downright") { |
| 410 distance.set_y(-distance_length); | 432 distance.set_y(-distance_length); |
| 411 distance.set_x(-distance_length); | 433 distance.set_x(-distance_length); |
| 434 velocity.set_y(-velocity_y); |
| 435 velocity.set_x(-velocity_x); |
| 412 } else { | 436 } else { |
| 413 return false; | 437 return false; |
| 414 } | 438 } |
| 439 |
| 415 gesture_params->distances.push_back(distance); | 440 gesture_params->distances.push_back(distance); |
| 441 gesture_params->velocity = velocity; |
| 416 | 442 |
| 417 // TODO(678879): If the render_view_impl is destroyed while the gesture is in | 443 // TODO(678879): If the render_view_impl is destroyed while the gesture is in |
| 418 // progress, we will leak the callback and context. This needs to be fixed, | 444 // progress, we will leak the callback and context. This needs to be fixed, |
| 419 // somehow, see https://crbug.com/678879. | 445 // somehow, see https://crbug.com/678879. |
| 420 context.render_view_impl()->GetWidget()->QueueSyntheticGesture( | 446 context.render_view_impl()->GetWidget()->QueueSyntheticGesture( |
| 421 std::move(gesture_params), | 447 std::move(gesture_params), |
| 422 base::Bind(&OnSyntheticGestureCompleted, | 448 base::Bind(&OnSyntheticGestureCompleted, |
| 423 base::RetainedRef(callback_and_context))); | 449 base::RetainedRef(callback_and_context))); |
| 424 | 450 |
| 425 return true; | 451 return true; |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 } | 776 } |
| 751 | 777 |
| 752 bool GpuBenchmarking::Swipe(gin::Arguments* args) { | 778 bool GpuBenchmarking::Swipe(gin::Arguments* args) { |
| 753 GpuBenchmarkingContext context; | 779 GpuBenchmarkingContext context; |
| 754 if (!context.Init(true)) | 780 if (!context.Init(true)) |
| 755 return false; | 781 return false; |
| 756 | 782 |
| 757 float page_scale_factor = context.web_view()->PageScaleFactor(); | 783 float page_scale_factor = context.web_view()->PageScaleFactor(); |
| 758 blink::WebRect rect = context.render_view_impl()->GetWidget()->ViewRect(); | 784 blink::WebRect rect = context.render_view_impl()->GetWidget()->ViewRect(); |
| 759 | 785 |
| 760 std::string direction = "up"; | 786 std::string direction = "down"; |
| 761 float pixels_to_scroll = 0; | 787 float pixels_to_scroll = 0; |
| 762 v8::Local<v8::Function> callback; | 788 v8::Local<v8::Function> callback; |
| 763 float start_x = rect.width / (page_scale_factor * 2); | 789 float start_x = rect.width / (page_scale_factor * 2); |
| 764 float start_y = rect.height / (page_scale_factor * 2); | 790 float start_y = rect.height / (page_scale_factor * 2); |
| 765 float speed_in_pixels_s = 800; | 791 float speed_in_pixels_s = 800; |
| 792 int gesture_source_type = SyntheticGestureParams::DEFAULT_INPUT; |
| 793 float velocity_x = 0; |
| 794 float velocity_y = 0; |
| 766 | 795 |
| 767 if (!GetOptionalArg(args, &direction) || | 796 if (!GetOptionalArg(args, &direction) || |
| 768 !GetOptionalArg(args, &pixels_to_scroll) || | 797 !GetOptionalArg(args, &pixels_to_scroll) || |
| 769 !GetOptionalArg(args, &callback) || | 798 !GetOptionalArg(args, &callback) || |
| 770 !GetOptionalArg(args, &start_x) || | 799 !GetOptionalArg(args, &start_x) || |
| 771 !GetOptionalArg(args, &start_y) || | 800 !GetOptionalArg(args, &start_y) || |
| 772 !GetOptionalArg(args, &speed_in_pixels_s)) { | 801 !GetOptionalArg(args, &speed_in_pixels_s)) { |
| 773 return false; | 802 return false; |
| 774 } | 803 } |
| 775 | 804 |
| 776 return BeginSmoothScroll(args->isolate(), | 805 // If no gesture source type is provided, do a touch swipe by default. |
| 777 -pixels_to_scroll, | 806 if (!GetOptionalArg(args, &gesture_source_type)) |
| 778 callback, | 807 gesture_source_type = SyntheticGestureParams::TOUCH_INPUT; |
| 779 1, // TOUCH_INPUT | 808 |
| 780 direction, | 809 if (gesture_source_type == SyntheticGestureParams::MOUSE_INPUT && |
| 781 speed_in_pixels_s, | 810 (!GetOptionalArg(args, &velocity_x) || |
| 782 false, | 811 !GetOptionalArg(args, &velocity_y))) { |
| 783 start_x, | 812 return false; |
| 784 start_y); | 813 } |
| 814 |
| 815 return BeginSmoothScroll(args->isolate(), pixels_to_scroll, callback, |
| 816 gesture_source_type, direction, speed_in_pixels_s, |
| 817 false, start_x, start_y, velocity_x, velocity_y); |
| 785 } | 818 } |
| 786 | 819 |
| 787 bool GpuBenchmarking::ScrollBounce(gin::Arguments* args) { | 820 bool GpuBenchmarking::ScrollBounce(gin::Arguments* args) { |
| 788 GpuBenchmarkingContext context; | 821 GpuBenchmarkingContext context; |
| 789 if (!context.Init(false)) | 822 if (!context.Init(false)) |
| 790 return false; | 823 return false; |
| 791 | 824 |
| 792 float page_scale_factor = context.web_view()->PageScaleFactor(); | 825 float page_scale_factor = context.web_view()->PageScaleFactor(); |
| 793 blink::WebRect rect = context.render_view_impl()->GetWidget()->ViewRect(); | 826 blink::WebRect rect = context.render_view_impl()->GetWidget()->ViewRect(); |
| 794 | 827 |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 &gpu_driver_bug_workarounds))) { | 1163 &gpu_driver_bug_workarounds))) { |
| 1131 return; | 1164 return; |
| 1132 } | 1165 } |
| 1133 | 1166 |
| 1134 v8::Local<v8::Value> result; | 1167 v8::Local<v8::Value> result; |
| 1135 if (gin::TryConvertToV8(args->isolate(), gpu_driver_bug_workarounds, &result)) | 1168 if (gin::TryConvertToV8(args->isolate(), gpu_driver_bug_workarounds, &result)) |
| 1136 args->Return(result); | 1169 args->Return(result); |
| 1137 } | 1170 } |
| 1138 | 1171 |
| 1139 } // namespace content | 1172 } // namespace content |
| OLD | NEW |