Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 351633002: DevTools: Implemented new properties of ScreencastFrameMetadata (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Added property device. Removed bad use of GetRequestedRendererSize Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698