| Index: content/renderer/gpu/gpu_benchmarking_extension.cc
|
| diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc
|
| index e8d968e399bfe277861e8d0591df65e7c8ea121a..e1cc7f9c52cf129c73eb69f4e98a05a81bb6007a 100644
|
| --- a/content/renderer/gpu/gpu_benchmarking_extension.cc
|
| +++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
|
| @@ -20,6 +20,8 @@
|
| #include "content/common/child_process_messages.h"
|
| #include "content/common/input/synthetic_gesture_params.h"
|
| #include "content/common/input/synthetic_pinch_gesture_params.h"
|
| +#include "content/common/input/synthetic_pointer_action_list_params.h"
|
| +#include "content/common/input/synthetic_pointer_action_params.h"
|
| #include "content/common/input/synthetic_smooth_drag_gesture_params.h"
|
| #include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
|
| #include "content/common/input/synthetic_tap_gesture_params.h"
|
| @@ -509,6 +511,7 @@ gin::ObjectTemplateBuilder GpuBenchmarking::GetObjectTemplateBuilder(
|
| .SetMethod("visualViewportHeight", &GpuBenchmarking::VisualViewportHeight)
|
| .SetMethod("visualViewportWidth", &GpuBenchmarking::VisualViewportWidth)
|
| .SetMethod("tap", &GpuBenchmarking::Tap)
|
| + .SetMethod("touchActionSequence", &GpuBenchmarking::TouchActionSequence)
|
| .SetMethod("clearImageCache", &GpuBenchmarking::ClearImageCache)
|
| .SetMethod("runMicroBenchmark", &GpuBenchmarking::RunMicroBenchmark)
|
| .SetMethod("sendMessageToMicroBenchmark",
|
| @@ -929,6 +932,75 @@ bool GpuBenchmarking::Tap(gin::Arguments* args) {
|
| return true;
|
| }
|
|
|
| +bool GpuBenchmarking::TouchActionSequence(gin::Arguments* args) {
|
| + GpuBenchmarkingContext context;
|
| + if (!context.Init(false))
|
| + return false;
|
| +
|
| + v8::Local<v8::Function> callback;
|
| + // pass a two-dimensional list of actions.
|
| + int pointer_action_type_int;
|
| + int index;
|
| + float position_x = 0;
|
| + float position_y = 0;
|
| + int gesture_source_type = SyntheticGestureParams::DEFAULT_INPUT;
|
| + SyntheticPointerActionParams::PointerActionType pointer_action_type;
|
| + if (!GetArg(args, &pointer_action_type_int)) {
|
| + return false;
|
| + }
|
| + pointer_action_type =
|
| + static_cast<SyntheticPointerActionParams::PointerActionType>(
|
| + pointer_action_type_int);
|
| + SyntheticPointerActionParams gesture_params(pointer_action_type);
|
| + if (pointer_action_type !=
|
| + SyntheticPointerActionParams::PointerActionType::PROCESS &&
|
| + pointer_action_type !=
|
| + SyntheticPointerActionParams::PointerActionType::FINISH) {
|
| + if (!GetArg(args, &index)) {
|
| + return false;
|
| + }
|
| + gesture_params.set_index(index);
|
| + if (pointer_action_type ==
|
| + SyntheticPointerActionParams::PointerActionType::PRESS ||
|
| + pointer_action_type ==
|
| + SyntheticPointerActionParams::PointerActionType::MOVE) {
|
| + if (!GetArg(args, &position_x) || !GetArg(args, &position_y)) {
|
| + return false;
|
| + }
|
| + gesture_params.set_position(gfx::PointF(position_x, position_y));
|
| + }
|
| + }
|
| +
|
| + if (!GetOptionalArg(args, &gesture_source_type) ||
|
| + !GetOptionalArg(args, &callback)) {
|
| + return false;
|
| + }
|
| +
|
| + if (gesture_source_type < 0 ||
|
| + gesture_source_type > SyntheticGestureParams::GESTURE_SOURCE_TYPE_MAX) {
|
| + return false;
|
| + }
|
| + gesture_params.gesture_source_type =
|
| + static_cast<SyntheticGestureParams::GestureSourceType>(
|
| + gesture_source_type);
|
| +
|
| + std::unique_ptr<SyntheticPointerActionListParams> gesture_params_list(
|
| + new SyntheticPointerActionListParams(gesture_params));
|
| +
|
| + // At the end, we will send a 'FINISH' action and need a callback.
|
| + scoped_refptr<CallbackAndContext> callback_and_context =
|
| + new CallbackAndContext(args->isolate(), callback,
|
| + context.web_frame()->mainWorldScriptContext());
|
| + // TODO(nduca): If the render_view_impl is destroyed while the gesture is in
|
| + // progress, we will leak the callback and context. This needs to be fixed,
|
| + // somehow.
|
| + context.render_view_impl()->GetWidget()->QueueSyntheticGesture(
|
| + std::move(gesture_params_list),
|
| + base::Bind(&OnSyntheticGestureCompleted,
|
| + base::RetainedRef(callback_and_context)));
|
| + return true;
|
| +}
|
| +
|
| void GpuBenchmarking::ClearImageCache() {
|
| WebImageCache::clear();
|
| }
|
|
|