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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 8536049: Fix the race condition between mac drawRect and toggling accelerated compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 *results = WebKit::WebScreenInfoFactory::screenInfo(NULL); 219 *results = WebKit::WebScreenInfoFactory::screenInfo(NULL);
220 } 220 }
221 221
222 /////////////////////////////////////////////////////////////////////////////// 222 ///////////////////////////////////////////////////////////////////////////////
223 // RenderWidgetHostViewMac, public: 223 // RenderWidgetHostViewMac, public:
224 224
225 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) 225 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
226 : render_widget_host_(widget), 226 : render_widget_host_(widget),
227 about_to_validate_and_paint_(false), 227 about_to_validate_and_paint_(false),
228 call_set_needs_display_in_rect_pending_(false), 228 call_set_needs_display_in_rect_pending_(false),
229 last_frame_was_accelerated_(false),
229 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 230 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
230 is_loading_(false), 231 is_loading_(false),
231 is_hidden_(false), 232 is_hidden_(false),
232 is_showing_context_menu_(false), 233 is_showing_context_menu_(false),
233 weak_factory_(this), 234 weak_factory_(this),
234 accelerated_compositing_active_(false), 235 accelerated_compositing_active_(false),
235 needs_gpu_visibility_update_after_repaint_(false), 236 needs_gpu_visibility_update_after_repaint_(false),
236 compositing_surface_(gfx::kNullPluginWindow) { 237 compositing_surface_(gfx::kNullPluginWindow) {
237 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| goes away. 238 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| goes away.
238 // Since we autorelease it, our caller must put |native_view()| into the view 239 // Since we autorelease it, our caller must put |native_view()| into the view
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 void RenderWidgetHostViewMac::ImeCompositionRangeChanged( 532 void RenderWidgetHostViewMac::ImeCompositionRangeChanged(
532 const ui::Range& range) { 533 const ui::Range& range) {
533 // The RangeChanged message is only sent with valid values. The current 534 // The RangeChanged message is only sent with valid values. The current
534 // caret position (start == end) will be sent if there is no IME range. 535 // caret position (start == end) will be sent if there is no IME range.
535 [cocoa_view_ setMarkedRange:range.ToNSRange()]; 536 [cocoa_view_ setMarkedRange:range.ToNSRange()];
536 } 537 }
537 538
538 void RenderWidgetHostViewMac::DidUpdateBackingStore( 539 void RenderWidgetHostViewMac::DidUpdateBackingStore(
539 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy, 540 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy,
540 const std::vector<gfx::Rect>& copy_rects) { 541 const std::vector<gfx::Rect>& copy_rects) {
542 last_frame_was_accelerated_ = false;
543
541 if (!is_hidden_) { 544 if (!is_hidden_) {
542 std::vector<gfx::Rect> rects(copy_rects); 545 std::vector<gfx::Rect> rects(copy_rects);
543 546
544 // Because the findbar might be open, we cannot use scrollRect:by: here. For 547 // Because the findbar might be open, we cannot use scrollRect:by: here. For
545 // now, simply mark all of scroll rect as dirty. 548 // now, simply mark all of scroll rect as dirty.
546 if (!scroll_rect.IsEmpty()) 549 if (!scroll_rect.IsEmpty())
547 rects.push_back(scroll_rect); 550 rects.push_back(scroll_rect);
548 551
549 for (size_t i = 0; i < rects.size(); ++i) { 552 for (size_t i = 0; i < rects.size(); ++i) {
550 NSRect ns_rect = [cocoa_view_ flipRectToNSRect:rects[i]]; 553 NSRect ns_rect = [cocoa_view_ flipRectToNSRect:rects[i]];
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 uint64 surface_id, 872 uint64 surface_id,
870 int renderer_id, 873 int renderer_id,
871 int32 route_id, 874 int32 route_id,
872 int gpu_host_id) { 875 int gpu_host_id) {
873 TRACE_EVENT0("browser", 876 TRACE_EVENT0("browser",
874 "RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped"); 877 "RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped");
875 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 878 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
876 AcceleratedPluginView* view = ViewForPluginWindowHandle(window); 879 AcceleratedPluginView* view = ViewForPluginWindowHandle(window);
877 DCHECK(view); 880 DCHECK(view);
878 if (view) { 881 if (view) {
882 last_frame_was_accelerated_ = true;
879 plugin_container_manager_.SetSurfaceWasPaintedTo(window, surface_id); 883 plugin_container_manager_.SetSurfaceWasPaintedTo(window, surface_id);
880 884
881 // The surface is hidden until its first paint, to not show gargabe. 885 // The surface is hidden until its first paint, to not show gargabe.
882 if (plugin_container_manager_.SurfaceShouldBeVisible(window)) 886 if (plugin_container_manager_.SurfaceShouldBeVisible(window))
883 [view setHidden:NO]; 887 [view setHidden:NO];
884 [view drawView]; 888 [view drawView];
885 } 889 }
886 890
887 if (renderer_id != 0 || route_id != 0) { 891 if (renderer_id != 0 || route_id != 0) {
888 AcknowledgeSwapBuffers(renderer_id, 892 AcknowledgeSwapBuffers(renderer_id,
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
1731 - (void)drawRect:(NSRect)dirtyRect { 1735 - (void)drawRect:(NSRect)dirtyRect {
1732 if (!renderWidgetHostView_->render_widget_host_) { 1736 if (!renderWidgetHostView_->render_widget_host_) {
1733 // TODO(shess): Consider using something more noticable? 1737 // TODO(shess): Consider using something more noticable?
1734 [[NSColor whiteColor] set]; 1738 [[NSColor whiteColor] set];
1735 NSRectFill(dirtyRect); 1739 NSRectFill(dirtyRect);
1736 return; 1740 return;
1737 } 1741 }
1738 1742
1739 const gfx::Rect damagedRect([self flipNSRectToRect:dirtyRect]); 1743 const gfx::Rect damagedRect([self flipNSRectToRect:dirtyRect]);
1740 1744
1741 if (renderWidgetHostView_->render_widget_host_-> 1745 if (renderWidgetHostView_->last_frame_was_accelerated_) {
1742 is_accelerated_compositing_active()) {
1743 gfx::Rect gpuRect; 1746 gfx::Rect gpuRect;
1744 1747
1745 gfx::PluginWindowHandle root_handle = 1748 gfx::PluginWindowHandle root_handle =
1746 renderWidgetHostView_->plugin_container_manager_.root_container_handle(); 1749 renderWidgetHostView_->plugin_container_manager_.root_container_handle();
1747 if (root_handle != gfx::kNullPluginWindow) { 1750 if (root_handle != gfx::kNullPluginWindow) {
1748 AcceleratedPluginView* view = 1751 AcceleratedPluginView* view =
1749 renderWidgetHostView_->ViewForPluginWindowHandle(root_handle); 1752 renderWidgetHostView_->ViewForPluginWindowHandle(root_handle);
1750 DCHECK(view); 1753 DCHECK(view);
1751 if (view && ![view isHidden]) { 1754 if (view && ![view isHidden]) {
1752 gpuRect = [self flipNSRectToRect:[view frame]]; 1755 gpuRect = [self flipNSRectToRect:[view frame]];
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 if (!string) return NO; 2748 if (!string) return NO;
2746 2749
2747 // If the user is currently using an IME, confirm the IME input, 2750 // If the user is currently using an IME, confirm the IME input,
2748 // and then insert the text from the service, the same as TextEdit and Safari. 2751 // and then insert the text from the service, the same as TextEdit and Safari.
2749 [self confirmComposition]; 2752 [self confirmComposition];
2750 [self insertText:string]; 2753 [self insertText:string];
2751 return YES; 2754 return YES;
2752 } 2755 }
2753 2756
2754 @end 2757 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698