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 |