Index: content/browser/devtools/renderer_overrides_handler.cc |
diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc |
index 6bebadd47c7bb75a7723a2dc0dda9710220d03f1..bf88c64784f5f519c4043e4f2a240cc090289772 100644 |
--- a/content/browser/devtools/renderer_overrides_handler.cc |
+++ b/content/browser/devtools/renderer_overrides_handler.cc |
@@ -50,29 +50,7 @@ namespace { |
static const char kPng[] = "png"; |
static const char kJpeg[] = "jpeg"; |
static int kDefaultScreenshotQuality = 80; |
- |
-void ParseCaptureParameters(DevToolsProtocol::Command* command, |
- std::string* format, |
- int* quality, |
- double* scale) { |
- *quality = kDefaultScreenshotQuality; |
- *scale = 1; |
- base::DictionaryValue* params = command->params(); |
- if (params) { |
- params->GetString(devtools::Page::captureScreenshot::kParamFormat, |
- format); |
- params->GetInteger(devtools::Page::captureScreenshot::kParamQuality, |
- quality); |
- params->GetDouble(devtools::Page::captureScreenshot::kParamScale, |
- scale); |
- } |
- if (format->empty()) |
- *format = kPng; |
- if (*quality < 0 || *quality > 100) |
- *quality = kDefaultScreenshotQuality; |
- if (*scale <= 0 || *scale > 1) |
- *scale = 1; |
-} |
+static int kFrameRateThresholdMs = 100; |
void ParseGenericInputParams(base::DictionaryValue* params, |
WebInputEvent* event) { |
@@ -162,6 +140,12 @@ void RendererOverridesHandler::OnSwapCompositorFrame( |
} |
void RendererOverridesHandler::InnerSwapCompositorFrame() { |
+ if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < |
+ kFrameRateThresholdMs) { |
+ return; |
+ } |
+ |
+ last_frame_time_ = base::TimeTicks::Now(); |
std::string format; |
int quality = kDefaultScreenshotQuality; |
double scale = 1; |
@@ -183,6 +167,46 @@ void RendererOverridesHandler::InnerSwapCompositorFrame() { |
last_compositor_frame_metadata_)); |
} |
+void RendererOverridesHandler::ParseCaptureParameters( |
+ DevToolsProtocol::Command* command, |
+ std::string* format, |
+ int* quality, |
+ double* scale) { |
+ RenderViewHost* host = agent_->GetRenderViewHost(); |
+ gfx::Rect view_bounds = host->GetView()->GetViewBounds(); |
+ |
+ *quality = kDefaultScreenshotQuality; |
+ *scale = 1; |
+ double max_width = -1; |
+ double max_height = -1; |
+ base::DictionaryValue* params = command->params(); |
+ if (params) { |
+ params->GetString(devtools::Page::captureScreenshot::kParamFormat, |
+ format); |
+ params->GetInteger(devtools::Page::captureScreenshot::kParamQuality, |
+ quality); |
+ params->GetDouble(devtools::Page::captureScreenshot::kParamMaxWidth, |
+ &max_width); |
+ params->GetDouble(devtools::Page::captureScreenshot::kParamMaxHeight, |
+ &max_height); |
+ } |
+ |
+ float device_sf = last_compositor_frame_metadata_.device_scale_factor; |
+ |
+ if (max_width > 0) |
+ *scale = std::min(*scale, max_width / view_bounds.width() / device_sf); |
+ if (max_height > 0) |
+ *scale = std::min(*scale, max_height / view_bounds.height() / device_sf); |
+ |
+ if (format->empty()) |
+ *format = kPng; |
+ if (*quality < 0 || *quality > 100) |
+ *quality = kDefaultScreenshotQuality; |
+ if (*scale <= 0) |
+ *scale = 0.1; |
+ if (*scale > 5) |
+ *scale = 5; |
+} |
// DOM agent handlers -------------------------------------------------------- |
@@ -330,6 +354,7 @@ RendererOverridesHandler::PageStartScreencast( |
scoped_refptr<DevToolsProtocol::Response> |
RendererOverridesHandler::PageStopScreencast( |
scoped_refptr<DevToolsProtocol::Command> command) { |
+ last_frame_time_ = base::TimeTicks(); |
screencast_command_ = NULL; |
return command->SuccessResponse(NULL); |
} |
@@ -453,17 +478,11 @@ RendererOverridesHandler::InputDispatchMouseEvent( |
return NULL; |
} |
- int x; |
- int y; |
- if (!params->GetInteger(devtools::kParamX, &x) || |
- !params->GetInteger(devtools::kParamY, &y)) { |
+ if (!params->GetInteger(devtools::kParamX, &mouse_event.x) || |
+ !params->GetInteger(devtools::kParamY, &mouse_event.y)) { |
return NULL; |
} |
- float device_scale_factor = ui::GetScaleFactorScale( |
- GetScaleFactorForView(host->GetView())); |
- mouse_event.x = floor(x / device_scale_factor); |
- mouse_event.y = floor(y / device_scale_factor); |
mouse_event.windowX = mouse_event.x; |
mouse_event.windowY = mouse_event.y; |
mouse_event.globalX = mouse_event.x; |
@@ -534,17 +553,10 @@ RendererOverridesHandler::InputDispatchGestureEvent( |
return NULL; |
} |
- float device_scale_factor = ui::GetScaleFactorScale( |
- GetScaleFactorForView(host->GetView())); |
- |
- int x; |
- int y; |
- if (!params->GetInteger(devtools::kParamX, &x) || |
- !params->GetInteger(devtools::kParamY, &y)) { |
+ if (!params->GetInteger(devtools::kParamX, &event.x) || |
+ !params->GetInteger(devtools::kParamY, &event.y)) { |
return NULL; |
} |
- event.x = floor(x / device_scale_factor); |
- event.y = floor(y / device_scale_factor); |
event.globalX = event.x; |
event.globalY = event.y; |
@@ -557,8 +569,8 @@ RendererOverridesHandler::InputDispatchGestureEvent( |
devtools::Input::dispatchGestureEvent::kParamDeltaY, &dy)) { |
return NULL; |
} |
- event.data.scrollUpdate.deltaX = floor(dx / device_scale_factor); |
- event.data.scrollUpdate.deltaY = floor(dy / device_scale_factor); |
+ event.data.scrollUpdate.deltaX = dx; |
+ event.data.scrollUpdate.deltaY = dy; |
} |
if (type == "pinchUpdate") { |