OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer_host/render_widget_host_view_mac.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" |
6 | 6 |
7 #import <objc/runtime.h> | 7 #import <objc/runtime.h> |
8 #include <QuartzCore/QuartzCore.h> | 8 #include <QuartzCore/QuartzCore.h> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 src_pixel_rect.width(), src_pixel_rect.height()); | 1288 src_pixel_rect.width(), src_pixel_rect.height()); |
1289 target_canvas.drawBitmapRectToRect( | 1289 target_canvas.drawBitmapRectToRect( |
1290 source_bitmap, | 1290 source_bitmap, |
1291 &src_pixel_skrect, | 1291 &src_pixel_skrect, |
1292 SkRect::MakeXYWH(0, 0, dst_pixel_size.width(), dst_pixel_size.height()), | 1292 SkRect::MakeXYWH(0, 0, dst_pixel_size.width(), dst_pixel_size.height()), |
1293 NULL, | 1293 NULL, |
1294 SkCanvas::kNone_DrawBitmapRectFlag); | 1294 SkCanvas::kNone_DrawBitmapRectFlag); |
1295 | 1295 |
1296 ignore_result(scoped_callback_runner.Release()); | 1296 ignore_result(scoped_callback_runner.Release()); |
1297 callback.Run(true, target_bitmap); | 1297 callback.Run(true, target_bitmap); |
| 1298 } else { |
| 1299 callback.Run(false, SkBitmap()); |
1298 } | 1300 } |
1299 } | 1301 } |
1300 | 1302 |
1301 void RenderWidgetHostViewMac::CopyFromCompositingSurfaceToVideoFrame( | 1303 void RenderWidgetHostViewMac::CopyFromCompositingSurfaceToVideoFrame( |
1302 const gfx::Rect& src_subrect, | 1304 const gfx::Rect& src_subrect, |
1303 const scoped_refptr<media::VideoFrame>& target, | 1305 const scoped_refptr<media::VideoFrame>& target, |
1304 const base::Callback<void(bool)>& callback) { | 1306 const base::Callback<void(bool)>& callback) { |
1305 if (delegated_frame_host_) { | 1307 if (delegated_frame_host_) { |
1306 delegated_frame_host_->CopyFromCompositingSurfaceToVideoFrame( | 1308 delegated_frame_host_->CopyFromCompositingSurfaceToVideoFrame( |
1307 src_subrect, target, callback); | 1309 src_subrect, target, callback); |
1308 return; | 1310 return; |
1309 } | 1311 } |
1310 | 1312 |
1311 base::ScopedClosureRunner scoped_callback_runner(base::Bind(callback, false)); | 1313 base::ScopedClosureRunner scoped_callback_runner(base::Bind(callback, false)); |
1312 if (!render_widget_host_->is_accelerated_compositing_active() || | 1314 if (!compositing_iosurface_ || !compositing_iosurface_->HasIOSurface()) |
1313 !compositing_iosurface_ || | |
1314 !compositing_iosurface_->HasIOSurface()) | |
1315 return; | 1315 return; |
1316 | 1316 |
1317 if (!target.get()) { | 1317 if (!target.get()) { |
1318 NOTREACHED(); | 1318 NOTREACHED(); |
1319 return; | 1319 return; |
1320 } | 1320 } |
1321 | 1321 |
1322 if (target->format() != media::VideoFrame::YV12 && | 1322 if (target->format() != media::VideoFrame::YV12 && |
1323 target->format() != media::VideoFrame::I420) { | 1323 target->format() != media::VideoFrame::I420) { |
1324 NOTREACHED(); | 1324 NOTREACHED(); |
1325 return; | 1325 return; |
1326 } | 1326 } |
1327 | 1327 |
1328 if (src_subrect.IsEmpty()) | 1328 if (src_subrect.IsEmpty()) |
1329 return; | 1329 return; |
1330 | 1330 |
1331 ignore_result(scoped_callback_runner.Release()); | 1331 ignore_result(scoped_callback_runner.Release()); |
1332 compositing_iosurface_->CopyToVideoFrame( | 1332 compositing_iosurface_->CopyToVideoFrame( |
1333 GetScaledOpenGLPixelRect(src_subrect), | 1333 GetScaledOpenGLPixelRect(src_subrect), |
1334 target, | 1334 target, |
1335 callback); | 1335 callback); |
1336 } | 1336 } |
1337 | 1337 |
1338 bool RenderWidgetHostViewMac::CanCopyToVideoFrame() const { | 1338 bool RenderWidgetHostViewMac::CanCopyToVideoFrame() const { |
1339 if (delegated_frame_host_) | 1339 if (delegated_frame_host_) |
1340 return delegated_frame_host_->CanCopyToVideoFrame(); | 1340 return delegated_frame_host_->CanCopyToVideoFrame(); |
1341 | 1341 |
1342 return (!software_frame_manager_->HasCurrentFrame() && | 1342 return (!software_frame_manager_->HasCurrentFrame() && |
1343 render_widget_host_->is_accelerated_compositing_active() && | |
1344 compositing_iosurface_ && | 1343 compositing_iosurface_ && |
1345 compositing_iosurface_->HasIOSurface()); | 1344 compositing_iosurface_->HasIOSurface()); |
1346 } | 1345 } |
1347 | 1346 |
1348 bool RenderWidgetHostViewMac::CanSubscribeFrame() const { | 1347 bool RenderWidgetHostViewMac::CanSubscribeFrame() const { |
1349 if (delegated_frame_host_) | 1348 if (delegated_frame_host_) |
1350 return delegated_frame_host_->CanSubscribeFrame(); | 1349 return delegated_frame_host_->CanSubscribeFrame(); |
1351 | 1350 |
1352 return !software_frame_manager_->HasCurrentFrame(); | 1351 return !software_frame_manager_->HasCurrentFrame(); |
1353 } | 1352 } |
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1953 Source<RenderWidgetHost>(render_widget_host_), | 1952 Source<RenderWidgetHost>(render_widget_host_), |
1954 NotificationService::NoDetails()); | 1953 NotificationService::NoDetails()); |
1955 } else { | 1954 } else { |
1956 DLOG(ERROR) << "Received unexpected frame type."; | 1955 DLOG(ERROR) << "Received unexpected frame type."; |
1957 RecordAction( | 1956 RecordAction( |
1958 base::UserMetricsAction("BadMessageTerminate_UnexpectedFrameType")); | 1957 base::UserMetricsAction("BadMessageTerminate_UnexpectedFrameType")); |
1959 render_widget_host_->GetProcess()->ReceivedBadMessage(); | 1958 render_widget_host_->GetProcess()->ReceivedBadMessage(); |
1960 } | 1959 } |
1961 } | 1960 } |
1962 | 1961 |
1963 void RenderWidgetHostViewMac::OnAcceleratedCompositingStateChange() { | |
1964 } | |
1965 | |
1966 void RenderWidgetHostViewMac::AcceleratedSurfaceInitialized(int host_id, | 1962 void RenderWidgetHostViewMac::AcceleratedSurfaceInitialized(int host_id, |
1967 int route_id) { | 1963 int route_id) { |
1968 } | 1964 } |
1969 | 1965 |
1970 void RenderWidgetHostViewMac::GetScreenInfo(blink::WebScreenInfo* results) { | 1966 void RenderWidgetHostViewMac::GetScreenInfo(blink::WebScreenInfo* results) { |
1971 *results = GetWebScreenInfo(GetNativeView()); | 1967 *results = GetWebScreenInfo(GetNativeView()); |
1972 } | 1968 } |
1973 | 1969 |
1974 gfx::Rect RenderWidgetHostViewMac::GetBoundsInRootWindow() { | 1970 gfx::Rect RenderWidgetHostViewMac::GetBoundsInRootWindow() { |
1975 // TODO(shess): In case of !window, the view has been removed from | 1971 // TODO(shess): In case of !window, the view has been removed from |
(...skipping 2457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4433 } | 4429 } |
4434 | 4430 |
4435 - (void)disableRendering { | 4431 - (void)disableRendering { |
4436 // Disable the fade-out animation as the layer is removed. | 4432 // Disable the fade-out animation as the layer is removed. |
4437 ScopedCAActionDisabler disabler; | 4433 ScopedCAActionDisabler disabler; |
4438 [self removeFromSuperlayer]; | 4434 [self removeFromSuperlayer]; |
4439 renderWidgetHostView_ = nil; | 4435 renderWidgetHostView_ = nil; |
4440 } | 4436 } |
4441 | 4437 |
4442 @end // implementation SoftwareLayer | 4438 @end // implementation SoftwareLayer |
OLD | NEW |