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 #include <QuartzCore/QuartzCore.h> | 7 #include <QuartzCore/QuartzCore.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 1033 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 | 1044 |
1045 bool RenderWidgetHostViewMac::CompositorSwapBuffers(uint64 surface_handle, | 1045 bool RenderWidgetHostViewMac::CompositorSwapBuffers(uint64 surface_handle, |
1046 const gfx::Size& size) { | 1046 const gfx::Size& size) { |
1047 if (is_hidden_) | 1047 if (is_hidden_) |
1048 return true; | 1048 return true; |
1049 | 1049 |
1050 NSWindow* window = [cocoa_view_ window]; | 1050 NSWindow* window = [cocoa_view_ window]; |
1051 if (window_number() <= 0) { | 1051 if (window_number() <= 0) { |
1052 // There is no window to present so capturing during present won't work. | 1052 // There is no window to present so capturing during present won't work. |
1053 // We check if frame subscriber wants this frame and capture manually. | 1053 // We check if frame subscriber wants this frame and capture manually. |
1054 if (compositing_iosurface_.get() && frame_subscriber_.get()) { | 1054 if (compositing_iosurface_.get() && frame_subscriber_) { |
1055 scoped_refptr<media::VideoFrame> frame; | 1055 scoped_refptr<media::VideoFrame> frame; |
1056 RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback; | 1056 RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback; |
1057 if (frame_subscriber_->ShouldCaptureFrame(&frame, &callback)) { | 1057 if (frame_subscriber_->ShouldCaptureFrame(&frame, &callback)) { |
1058 compositing_iosurface_->SetIOSurface(surface_handle, size); | 1058 compositing_iosurface_->SetIOSurface(surface_handle, size); |
1059 compositing_iosurface_->CopyToVideoFrame( | 1059 compositing_iosurface_->CopyToVideoFrame( |
1060 gfx::Rect(size), ScaleFactor(cocoa_view_), frame, | 1060 gfx::Rect(size), ScaleFactor(cocoa_view_), frame, |
1061 base::Bind(callback, base::Time::Now())); | 1061 base::Bind(callback, base::Time::Now())); |
1062 return true; | 1062 return true; |
1063 } | 1063 } |
1064 } | 1064 } |
(...skipping 12 matching lines...) Expand all Loading... |
1077 base::StringPrintf("window %s delegate %s controller %s", | 1077 base::StringPrintf("window %s delegate %s controller %s", |
1078 object_getClassName(window), | 1078 object_getClassName(window), |
1079 object_getClassName([window delegate]), | 1079 object_getClassName([window delegate]), |
1080 object_getClassName([window windowController])); | 1080 object_getClassName([window windowController])); |
1081 base::debug::SetCrashKeyValue(kCrashKey, value); | 1081 base::debug::SetCrashKeyValue(kCrashKey, value); |
1082 } | 1082 } |
1083 | 1083 |
1084 return true; | 1084 return true; |
1085 } | 1085 } |
1086 | 1086 |
1087 if (!compositing_iosurface_.get()) { | 1087 if (!compositing_iosurface_) { |
1088 CompositingIOSurfaceMac::SurfaceOrder order = allow_overlapping_views_ ? | 1088 CompositingIOSurfaceMac::SurfaceOrder order = allow_overlapping_views_ ? |
1089 CompositingIOSurfaceMac::SURFACE_ORDER_BELOW_WINDOW : | 1089 CompositingIOSurfaceMac::SURFACE_ORDER_BELOW_WINDOW : |
1090 CompositingIOSurfaceMac::SURFACE_ORDER_ABOVE_WINDOW; | 1090 CompositingIOSurfaceMac::SURFACE_ORDER_ABOVE_WINDOW; |
1091 compositing_iosurface_.reset( | 1091 compositing_iosurface_.reset( |
1092 CompositingIOSurfaceMac::Create(window_number(), order)); | 1092 CompositingIOSurfaceMac::Create(window_number(), order)); |
1093 } | 1093 } |
1094 | 1094 |
1095 if (!compositing_iosurface_.get()) | 1095 if (!compositing_iosurface_) |
1096 return true; | 1096 return true; |
1097 | 1097 |
1098 compositing_iosurface_->SetIOSurface(surface_handle, size); | 1098 compositing_iosurface_->SetIOSurface(surface_handle, size); |
1099 | 1099 |
1100 GotAcceleratedFrame(); | 1100 GotAcceleratedFrame(); |
1101 | 1101 |
1102 gfx::Size window_size(NSSizeToCGSize([cocoa_view_ frame].size)); | 1102 gfx::Size window_size(NSSizeToCGSize([cocoa_view_ frame].size)); |
1103 if (window_size.IsEmpty()) { | 1103 if (window_size.IsEmpty()) { |
1104 // setNeedsDisplay will never display and we'll never ack if the window is | 1104 // setNeedsDisplay will never display and we'll never ack if the window is |
1105 // empty, so ack now and don't bother calling setNeedsDisplay below. | 1105 // empty, so ack now and don't bother calling setNeedsDisplay below. |
(...skipping 10 matching lines...) Expand all Loading... |
1116 } | 1116 } |
1117 return true; | 1117 return true; |
1118 } | 1118 } |
1119 | 1119 |
1120 void RenderWidgetHostViewMac::AckPendingSwapBuffers() { | 1120 void RenderWidgetHostViewMac::AckPendingSwapBuffers() { |
1121 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::AckPendingSwapBuffers"); | 1121 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::AckPendingSwapBuffers"); |
1122 while (!pending_swap_buffers_acks_.empty()) { | 1122 while (!pending_swap_buffers_acks_.empty()) { |
1123 if (pending_swap_buffers_acks_.front().first != 0) { | 1123 if (pending_swap_buffers_acks_.front().first != 0) { |
1124 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; | 1124 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; |
1125 ack_params.sync_point = 0; | 1125 ack_params.sync_point = 0; |
1126 if (compositing_iosurface_.get()) | 1126 if (compositing_iosurface_) |
1127 ack_params.renderer_id = compositing_iosurface_->GetRendererID(); | 1127 ack_params.renderer_id = compositing_iosurface_->GetRendererID(); |
1128 RenderWidgetHostImpl::AcknowledgeBufferPresent( | 1128 RenderWidgetHostImpl::AcknowledgeBufferPresent( |
1129 pending_swap_buffers_acks_.front().first, | 1129 pending_swap_buffers_acks_.front().first, |
1130 pending_swap_buffers_acks_.front().second, | 1130 pending_swap_buffers_acks_.front().second, |
1131 ack_params); | 1131 ack_params); |
1132 if (render_widget_host_) { | 1132 if (render_widget_host_) { |
1133 render_widget_host_->AcknowledgeSwapBuffersToRenderer(); | 1133 render_widget_host_->AcknowledgeSwapBuffersToRenderer(); |
1134 | 1134 |
1135 // Send VSync parameters to compositor thread. | 1135 // Send VSync parameters to compositor thread. |
1136 if (compositing_iosurface_.get()) { | 1136 if (compositing_iosurface_) { |
1137 base::TimeTicks timebase; | 1137 base::TimeTicks timebase; |
1138 uint32 numerator = 0, denominator = 0; | 1138 uint32 numerator = 0, denominator = 0; |
1139 compositing_iosurface_->GetVSyncParameters(&timebase, | 1139 compositing_iosurface_->GetVSyncParameters(&timebase, |
1140 &numerator, | 1140 &numerator, |
1141 &denominator); | 1141 &denominator); |
1142 if (numerator > 0 && denominator > 0) { | 1142 if (numerator > 0 && denominator > 0) { |
1143 int64 interval_micros = | 1143 int64 interval_micros = |
1144 1000000 * static_cast<int64>(numerator) / denominator; | 1144 1000000 * static_cast<int64>(numerator) / denominator; |
1145 render_widget_host_->UpdateVSyncParameters( | 1145 render_widget_host_->UpdateVSyncParameters( |
1146 timebase, base::TimeDelta::FromMicroseconds(interval_micros)); | 1146 timebase, base::TimeDelta::FromMicroseconds(interval_micros)); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1299 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1300 | 1300 |
1301 pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id, | 1301 pending_swap_buffers_acks_.push_back(std::make_pair(params.route_id, |
1302 gpu_host_id)); | 1302 gpu_host_id)); |
1303 | 1303 |
1304 if (CompositorSwapBuffers(params.surface_handle, params.surface_size)) | 1304 if (CompositorSwapBuffers(params.surface_handle, params.surface_size)) |
1305 AckPendingSwapBuffers(); | 1305 AckPendingSwapBuffers(); |
1306 } | 1306 } |
1307 | 1307 |
1308 void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() { | 1308 void RenderWidgetHostViewMac::AcceleratedSurfaceSuspend() { |
1309 if (compositing_iosurface_.get()) | 1309 if (compositing_iosurface_) |
1310 compositing_iosurface_->UnrefIOSurface(); | 1310 compositing_iosurface_->UnrefIOSurface(); |
1311 } | 1311 } |
1312 | 1312 |
1313 void RenderWidgetHostViewMac::AcceleratedSurfaceRelease() { | 1313 void RenderWidgetHostViewMac::AcceleratedSurfaceRelease() { |
1314 compositing_iosurface_.reset(); | 1314 compositing_iosurface_.reset(); |
1315 } | 1315 } |
1316 | 1316 |
1317 bool RenderWidgetHostViewMac::HasAcceleratedSurface( | 1317 bool RenderWidgetHostViewMac::HasAcceleratedSurface( |
1318 const gfx::Size& desired_size) { | 1318 const gfx::Size& desired_size) { |
1319 return last_frame_was_accelerated_ && | 1319 return last_frame_was_accelerated_ && |
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2176 withObject:nil | 2176 withObject:nil |
2177 afterDelay:0]; | 2177 afterDelay:0]; |
2178 } | 2178 } |
2179 } | 2179 } |
2180 | 2180 |
2181 - (void)globalFrameDidChange:(NSNotification*)notification { | 2181 - (void)globalFrameDidChange:(NSNotification*)notification { |
2182 if (handlingGlobalFrameDidChange_) | 2182 if (handlingGlobalFrameDidChange_) |
2183 return; | 2183 return; |
2184 | 2184 |
2185 handlingGlobalFrameDidChange_ = YES; | 2185 handlingGlobalFrameDidChange_ = YES; |
2186 if (renderWidgetHostView_->compositing_iosurface_.get()) | 2186 if (renderWidgetHostView_->compositing_iosurface_) |
2187 renderWidgetHostView_->compositing_iosurface_->GlobalFrameDidChange(); | 2187 renderWidgetHostView_->compositing_iosurface_->GlobalFrameDidChange(); |
2188 handlingGlobalFrameDidChange_ = NO; | 2188 handlingGlobalFrameDidChange_ = NO; |
2189 } | 2189 } |
2190 | 2190 |
2191 - (void)windowChangedGlobalFrame:(NSNotification*)notification { | 2191 - (void)windowChangedGlobalFrame:(NSNotification*)notification { |
2192 renderWidgetHostView_->UpdateScreenInfo( | 2192 renderWidgetHostView_->UpdateScreenInfo( |
2193 renderWidgetHostView_->GetNativeView()); | 2193 renderWidgetHostView_->GetNativeView()); |
2194 } | 2194 } |
2195 | 2195 |
2196 - (void)setFrameSize:(NSSize)newSize { | 2196 - (void)setFrameSize:(NSSize)newSize { |
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3360 if (!string) return NO; | 3360 if (!string) return NO; |
3361 | 3361 |
3362 // If the user is currently using an IME, confirm the IME input, | 3362 // If the user is currently using an IME, confirm the IME input, |
3363 // and then insert the text from the service, the same as TextEdit and Safari. | 3363 // and then insert the text from the service, the same as TextEdit and Safari. |
3364 [self confirmComposition]; | 3364 [self confirmComposition]; |
3365 [self insertText:string]; | 3365 [self insertText:string]; |
3366 return YES; | 3366 return YES; |
3367 } | 3367 } |
3368 | 3368 |
3369 @end | 3369 @end |
OLD | NEW |