Chromium Code Reviews| Index: chrome/browser/ui/cocoa/dev_tools_controller.mm |
| diff --git a/chrome/browser/ui/cocoa/dev_tools_controller.mm b/chrome/browser/ui/cocoa/dev_tools_controller.mm |
| index f2bff7a4005650564f216b7bff9db6cce08f37ce..03f3bf4b0b5f117bf89f737d5ca6610bb1cdc200 100644 |
| --- a/chrome/browser/ui/cocoa/dev_tools_controller.mm |
| +++ b/chrome/browser/ui/cocoa/dev_tools_controller.mm |
| @@ -9,6 +9,7 @@ |
| #include <Cocoa/Cocoa.h> |
| +#include "base/command_line.h" |
| #include "base/prefs/pref_service.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -16,10 +17,22 @@ |
| #include "chrome/common/pref_names.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_contents_view.h" |
| +#include "content/public/common/content_switches.h" |
| #include "ui/base/cocoa/base_view.h" |
| #include "ui/base/cocoa/focus_tracker.h" |
| +#include "ui/gfx/mac/scoped_ns_disable_screen_updates.h" |
| #include "ui/gfx/size_conversions.h" |
| +namespace { |
| + |
| +bool CoreAnimationIsEnabled() { |
| + static bool is_enabled = CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kUseCoreAnimation); |
| + return is_enabled; |
| +} |
| + |
| +} |
| + |
| using content::WebContents; |
| @interface DevToolsContainerView : BaseView { |
| @@ -55,13 +68,27 @@ using content::WebContents; |
| DCHECK_EQ(1u, [subviews count]); |
| contentsView_ = [subviews objectAtIndex:0]; |
| devToolsView_ = devToolsView; |
| - // Place DevTools under contents. |
| - [self addSubview:devToolsView positioned:NSWindowBelow relativeTo:nil]; |
| + if (CoreAnimationIsEnabled()) { |
|
dgozman
2014/02/20 21:29:51
Do you plan to discard the old without-core-animat
ccameron
2014/02/20 21:31:10
Yes, hopefully all non-CA code will be deleted bef
|
| + // Make sure we do not draw any transient arrangements of views. |
| + gfx::ScopedNSDisableScreenUpdates disabler; |
| + [self replaceSubview:contentsView_ with:devToolsView_]; |
| + [devToolsView_ addSubview:contentsView_]; |
| + } else { |
| + // Place DevTools under contents. |
| + [self addSubview:devToolsView positioned:NSWindowBelow relativeTo:nil]; |
| + } |
| } |
| - (void)hideDevTools { |
| DCHECK_EQ(2u, [[self subviews] count]); |
| - [devToolsView_ removeFromSuperview]; |
| + if (CoreAnimationIsEnabled()) { |
| + // Make sure we do not draw any transient arrangements of views. |
| + gfx::ScopedNSDisableScreenUpdates disabler; |
| + [contentsView_ removeFromSuperview]; |
| + [self replaceSubview:devToolsView_ with:contentsView_]; |
| + } else { |
| + [devToolsView_ removeFromSuperview]; |
| + } |
| contentsView_ = nil; |
| devToolsView_ = nil; |
| } |
| @@ -118,6 +145,8 @@ using content::WebContents; |
| DevToolsWindow* newDevToolsWindow = contents ? |
| DevToolsWindow::GetDockedInstanceForInspectedTab(contents) : NULL; |
| + // Make sure we do not draw any transient arrangements of views. |
| + gfx::ScopedNSDisableScreenUpdates disabler; |
| bool shouldHide = devToolsWindow_ && devToolsWindow_ != newDevToolsWindow; |
| bool shouldShow = newDevToolsWindow && devToolsWindow_ != newDevToolsWindow; |
| @@ -141,8 +170,6 @@ using content::WebContents; |
| [self showDevToolsView]; |
| [devToolsContainerView_ adjustSubviews]; |
| - if (shouldHide || shouldShow) |
| - [[devToolsContainerView_ window] disableScreenUpdatesUntilFlush]; |
| } |
| - (void)showDevToolsView { |