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

Unified Diff: chrome/browser/gtk/browser_toolbar_gtk.cc

Issue 2985006: GTK: reduce cpu usage of upgrade notification animation. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: merge to ToT Created 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/gtk/browser_toolbar_gtk.cc
diff --git a/chrome/browser/gtk/browser_toolbar_gtk.cc b/chrome/browser/gtk/browser_toolbar_gtk.cc
index b88bcc2f2868f88b17e8ba1efc8c4c10930875a6..a8a6ed27c53e451901b107474d28bed36033e681 100644
--- a/chrome/browser/gtk/browser_toolbar_gtk.cc
+++ b/chrome/browser/gtk/browser_toolbar_gtk.cc
@@ -95,6 +95,7 @@ BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window)
profile_(NULL),
menu_bar_helper_(this),
upgrade_reminder_animation_(this),
+ upgrade_reminder_canceled_(false),
collapsed_(false) {
browser_->command_updater()->AddCommandObserver(IDC_BACK, this);
browser_->command_updater()->AddCommandObserver(IDC_FORWARD, this);
@@ -110,11 +111,13 @@ BrowserToolbarGtk::BrowserToolbarGtk(Browser* browser, BrowserWindowGtk* window)
upgrade_reminder_animation_.SetThrobDuration(kThrobDuration);
- if (Singleton<UpgradeDetector>::get()->notify_upgrade())
- ShowUpgradeReminder();
+ ActiveWindowWatcherX::AddObserver(this);
+ MaybeShowUpgradeReminder();
}
BrowserToolbarGtk::~BrowserToolbarGtk() {
+ ActiveWindowWatcherX::RemoveObserver(this);
+
browser_->command_updater()->RemoveCommandObserver(IDC_BACK, this);
browser_->command_updater()->RemoveCommandObserver(IDC_FORWARD, this);
browser_->command_updater()->RemoveCommandObserver(IDC_HOME, this);
@@ -448,7 +451,7 @@ void BrowserToolbarGtk::Observe(NotificationType type,
UpdateRoundedness();
} else if (type == NotificationType::UPGRADE_RECOMMENDED) {
- ShowUpgradeReminder();
+ MaybeShowUpgradeReminder();
} else {
NOTREACHED();
}
@@ -745,8 +748,15 @@ void BrowserToolbarGtk::NotifyPrefChanged(const std::wstring* pref) {
!home_page_is_new_tab_page_.IsManaged());
}
-void BrowserToolbarGtk::ShowUpgradeReminder() {
- upgrade_reminder_animation_.StartThrobbing(-1);
+void BrowserToolbarGtk::MaybeShowUpgradeReminder() {
+ // Only show the upgrade reminder animation for the currently active window.
+ if (window_->IsActive() &&
+ Singleton<UpgradeDetector>::get()->notify_upgrade() &&
+ !upgrade_reminder_canceled_) {
+ upgrade_reminder_animation_.StartThrobbing(-1);
+ } else {
+ upgrade_reminder_animation_.Reset();
+ }
}
bool BrowserToolbarGtk::ShouldOnlyShowLocation() const {
@@ -779,20 +789,30 @@ void BrowserToolbarGtk::PopupForButtonNextTo(GtkWidget* button,
}
void BrowserToolbarGtk::AnimationEnded(const Animation* animation) {
- AnimationProgressed(animation);
+ DCHECK_EQ(animation, &upgrade_reminder_animation_);
+ gtk_widget_queue_draw(app_menu_image_.get());
}
void BrowserToolbarGtk::AnimationProgressed(const Animation* animation) {
DCHECK_EQ(animation, &upgrade_reminder_animation_);
- gtk_widget_queue_draw(app_menu_image_.get());
+
+ if (UpgradeAnimationIsFaded())
+ gtk_widget_queue_draw(app_menu_image_.get());
}
void BrowserToolbarGtk::AnimationCanceled(const Animation* animation) {
- AnimationProgressed(animation);
+ AnimationEnded(animation);
+}
+
+void BrowserToolbarGtk::ActiveWindowChanged(GdkWindow* active_window) {
+ MaybeShowUpgradeReminder();
}
void BrowserToolbarGtk::OnAppMenuShow(GtkWidget* sender) {
- upgrade_reminder_animation_.Reset();
+ if (upgrade_reminder_animation_.is_animating()) {
+ upgrade_reminder_canceled_ = true;
+ MaybeShowUpgradeReminder();
+ }
}
gboolean BrowserToolbarGtk::OnAppMenuImageExpose(GtkWidget* sender,
@@ -801,10 +821,7 @@ gboolean BrowserToolbarGtk::OnAppMenuImageExpose(GtkWidget* sender,
return FALSE;
SkBitmap badge;
- if (upgrade_reminder_animation_.cycles_remaining() > 0 &&
- // This funky looking math makes the badge throb for 2 seconds once
- // every 8 seconds.
- ((upgrade_reminder_animation_.cycles_remaining() - 1) / 2) % 4 == 0) {
+ if (UpgradeAnimationIsFaded()) {
badge = SkBitmapOperations::CreateBlendedBitmap(
*theme_provider_->GetBitmapNamed(IDR_UPGRADE_DOT_ACTIVE),
*theme_provider_->GetBitmapNamed(IDR_UPGRADE_DOT_INACTIVE),
@@ -825,3 +842,10 @@ gboolean BrowserToolbarGtk::OnAppMenuImageExpose(GtkWidget* sender,
return FALSE;
}
+
+bool BrowserToolbarGtk::UpgradeAnimationIsFaded() {
+ return upgrade_reminder_animation_.cycles_remaining() > 0 &&
+ // This funky looking math makes the badge throb for 2 seconds once
+ // every 8 seconds.
+ ((upgrade_reminder_animation_.cycles_remaining() - 1) / 2) % 4 == 0;
+}

Powered by Google App Engine
This is Rietveld 408576698