Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser/devtools/renderer_overrides_handler.h" | 5 #include "content/browser/devtools/renderer_overrides_handler.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/barrier_closure.h" | 10 #include "base/barrier_closure.h" |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 196 kFrameRateThresholdMs) { | 196 kFrameRateThresholdMs) { |
| 197 return; | 197 return; |
| 198 } | 198 } |
| 199 | 199 |
| 200 RenderViewHost* host = agent_->GetRenderViewHost(); | 200 RenderViewHost* host = agent_->GetRenderViewHost(); |
| 201 if (!host->GetView()) | 201 if (!host->GetView()) |
| 202 return; | 202 return; |
| 203 | 203 |
| 204 last_frame_time_ = base::TimeTicks::Now(); | 204 last_frame_time_ = base::TimeTicks::Now(); |
| 205 | 205 |
| 206 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 206 // FIXME: do not use previous frame metadata. |
|
pfeldman
2014/06/25 13:19:10
// TODO(vkuzkokov): do not ...
as per chromium cod
| |
| 207 host->GetView()); | 207 cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_; |
| 208 gfx::Size screen_size_dip(view->GetRequestedRendererSize()); | 208 |
| 209 float page_scale = metadata.page_scale_factor; | |
| 210 gfx::SizeF view_size_dip = gfx::ScaleSize(metadata.viewport_size, page_scale); | |
|
dgozman
2014/06/25 13:25:38
I'd say this is actually viewport_size_dip.
| |
| 211 | |
| 212 float total_bar_height = metadata.location_bar_content_translation.y() + | |
|
dgozman
2014/06/25 13:25:38
total_bar_height_dip
| |
| 213 metadata.overdraw_bottom_height; | |
| 214 gfx::SizeF screen_size_dip(view_size_dip.width(), | |
|
dgozman
2014/06/25 13:25:38
And this one is view_size_dip.
| |
| 215 view_size_dip.height() + total_bar_height); | |
| 209 | 216 |
| 210 std::string format; | 217 std::string format; |
| 211 int quality = kDefaultScreenshotQuality; | 218 int quality = kDefaultScreenshotQuality; |
| 212 double scale = 1; | 219 double scale = 1; |
| 213 double max_width = -1; | 220 double max_width = -1; |
| 214 double max_height = -1; | 221 double max_height = -1; |
| 215 base::DictionaryValue* params = screencast_command_->params(); | 222 base::DictionaryValue* params = screencast_command_->params(); |
| 216 if (params) { | 223 if (params) { |
| 217 params->GetString(devtools::Page::startScreencast::kParamFormat, | 224 params->GetString(devtools::Page::startScreencast::kParamFormat, |
| 218 &format); | 225 &format); |
| 219 params->GetInteger(devtools::Page::startScreencast::kParamQuality, | 226 params->GetInteger(devtools::Page::startScreencast::kParamQuality, |
| 220 &quality); | 227 &quality); |
| 221 params->GetDouble(devtools::Page::startScreencast::kParamMaxWidth, | 228 params->GetDouble(devtools::Page::startScreencast::kParamMaxWidth, |
| 222 &max_width); | 229 &max_width); |
| 223 params->GetDouble(devtools::Page::startScreencast::kParamMaxHeight, | 230 params->GetDouble(devtools::Page::startScreencast::kParamMaxHeight, |
| 224 &max_height); | 231 &max_height); |
| 225 } | 232 } |
| 226 | 233 |
| 234 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | |
| 235 host->GetView()); | |
| 227 blink::WebScreenInfo screen_info; | 236 blink::WebScreenInfo screen_info; |
| 228 view->GetScreenInfo(&screen_info); | 237 view->GetScreenInfo(&screen_info); |
| 229 double device_scale_factor = screen_info.deviceScaleFactor; | 238 double device_scale_factor = screen_info.deviceScaleFactor; |
| 230 | 239 |
| 231 if (max_width > 0) { | 240 if (max_width > 0) { |
| 232 double max_width_dip = max_width / device_scale_factor; | 241 double max_width_dip = max_width / device_scale_factor; |
| 233 scale = std::min(scale, max_width_dip / screen_size_dip.width()); | 242 scale = std::min(scale, max_width_dip / screen_size_dip.width()); |
| 234 } | 243 } |
| 235 if (max_height > 0) { | 244 if (max_height > 0) { |
| 236 double max_height_dip = max_height / device_scale_factor; | 245 double max_height_dip = max_height / device_scale_factor; |
| 237 scale = std::min(scale, max_height_dip / screen_size_dip.height()); | 246 scale = std::min(scale, max_height_dip / screen_size_dip.height()); |
| 238 } | 247 } |
| 239 | 248 |
| 240 if (format.empty()) | 249 if (format.empty()) |
| 241 format = kPng; | 250 format = kPng; |
| 242 if (quality < 0 || quality > 100) | 251 if (quality < 0 || quality > 100) |
| 243 quality = kDefaultScreenshotQuality; | 252 quality = kDefaultScreenshotQuality; |
| 244 if (scale <= 0) | 253 if (scale <= 0) |
| 245 scale = 0.1; | 254 scale = 0.1; |
| 246 | 255 |
| 247 // FIXME: do not use previous frame metadata. | |
| 248 cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_; | |
| 249 gfx::SizeF view_size_dip = gfx::ScaleSize(metadata.viewport_size, | |
| 250 metadata.page_scale_factor); | |
| 251 | |
| 252 gfx::Size snapshot_size_dip(gfx::ToRoundedSize( | 256 gfx::Size snapshot_size_dip(gfx::ToRoundedSize( |
| 253 gfx::ScaleSize(view_size_dip, scale))); | 257 gfx::ScaleSize(view_size_dip, scale))); |
| 254 | |
| 255 if (snapshot_size_dip.width() > 0 && snapshot_size_dip.height() > 0) { | 258 if (snapshot_size_dip.width() > 0 && snapshot_size_dip.height() > 0) { |
| 256 gfx::Rect view_bounds_dip(gfx::ToRoundedSize(view_size_dip)); | 259 gfx::Rect view_bounds_dip(gfx::ToRoundedSize(view_size_dip)); |
| 257 view->CopyFromCompositingSurface( | 260 view->CopyFromCompositingSurface( |
| 258 view_bounds_dip, snapshot_size_dip, | 261 view_bounds_dip, snapshot_size_dip, |
| 259 base::Bind(&RendererOverridesHandler::ScreencastFrameCaptured, | 262 base::Bind(&RendererOverridesHandler::ScreencastFrameCaptured, |
| 260 weak_factory_.GetWeakPtr(), | 263 weak_factory_.GetWeakPtr(), |
| 261 format, quality, last_compositor_frame_metadata_), | 264 format, quality, last_compositor_frame_metadata_), |
| 262 SkBitmap::kARGB_8888_Config); | 265 SkBitmap::kARGB_8888_Config); |
| 263 } | 266 } |
| 264 } | 267 } |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 602 metadata.root_scroll_offset.x()); | 605 metadata.root_scroll_offset.x()); |
| 603 viewport->SetDouble(devtools::DOM::Rect::kParamY, | 606 viewport->SetDouble(devtools::DOM::Rect::kParamY, |
| 604 metadata.root_scroll_offset.y()); | 607 metadata.root_scroll_offset.y()); |
| 605 viewport->SetDouble(devtools::DOM::Rect::kParamWidth, | 608 viewport->SetDouble(devtools::DOM::Rect::kParamWidth, |
| 606 metadata.viewport_size.width()); | 609 metadata.viewport_size.width()); |
| 607 viewport->SetDouble(devtools::DOM::Rect::kParamHeight, | 610 viewport->SetDouble(devtools::DOM::Rect::kParamHeight, |
| 608 metadata.viewport_size.height()); | 611 metadata.viewport_size.height()); |
| 609 response_metadata->Set( | 612 response_metadata->Set( |
| 610 devtools::Page::ScreencastFrameMetadata::kParamViewport, viewport); | 613 devtools::Page::ScreencastFrameMetadata::kParamViewport, viewport); |
| 611 | 614 |
| 615 gfx::SizeF view_size_dip = gfx::ScaleSize(metadata.viewport_size, | |
| 616 metadata.page_scale_factor); | |
| 617 base::DictionaryValue* device = new base::DictionaryValue(); | |
| 618 device->SetDouble(devtools::DOM::Rect::kParamWidth, | |
| 619 view_size_dip.width()); | |
| 620 device->SetDouble(devtools::DOM::Rect::kParamHeight, | |
| 621 view_size_dip.height() + | |
| 622 metadata.location_bar_content_translation.y() + | |
| 623 metadata.overdraw_bottom_height); | |
| 624 response_metadata->Set( | |
| 625 devtools::Page::ScreencastFrameMetadata::kParamDevice, device); | |
|
pfeldman
2014/06/25 13:19:10
This would require the roll, no? I'd rather have t
| |
| 626 | |
| 612 response->Set(devtools::Page::screencastFrame::kParamMetadata, | 627 response->Set(devtools::Page::screencastFrame::kParamMetadata, |
| 613 response_metadata); | 628 response_metadata); |
| 614 } | 629 } |
| 615 | 630 |
| 616 SendNotification(devtools::Page::screencastFrame::kName, response); | 631 SendNotification(devtools::Page::screencastFrame::kName, response); |
| 617 } | 632 } |
| 618 | 633 |
| 619 // Quota and Usage ------------------------------------------ | 634 // Quota and Usage ------------------------------------------ |
| 620 | 635 |
| 621 namespace { | 636 namespace { |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 978 return NULL; | 993 return NULL; |
| 979 } | 994 } |
| 980 event.data.pinchUpdate.scale = static_cast<float>(scale); | 995 event.data.pinchUpdate.scale = static_cast<float>(scale); |
| 981 } | 996 } |
| 982 | 997 |
| 983 host->ForwardGestureEvent(event); | 998 host->ForwardGestureEvent(event); |
| 984 return command->SuccessResponse(NULL); | 999 return command->SuccessResponse(NULL); |
| 985 } | 1000 } |
| 986 | 1001 |
| 987 } // namespace content | 1002 } // namespace content |
| OLD | NEW |