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 "ash/wm/window_animations.h" | 5 #include "ash/wm/window_animations.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "ash/shelf/wm_shelf.h" | 12 #include "ash/shelf/wm_shelf.h" |
13 #include "ash/wm/window_animation_types.h" | 13 #include "ash/wm/window_animation_types.h" |
14 #include "ash/wm/window_util.h" | 14 #include "ash/wm/window_util.h" |
15 #include "ash/wm/workspace_controller.h" | 15 #include "ash/wm/workspace_controller.h" |
16 #include "ash/wm_window.h" | 16 #include "ash/wm_window.h" |
17 #include "base/i18n/rtl.h" | 17 #include "base/i18n/rtl.h" |
18 #include "base/lazy_instance.h" | |
18 #include "base/logging.h" | 19 #include "base/logging.h" |
19 #include "base/memory/ptr_util.h" | 20 #include "base/memory/ptr_util.h" |
21 #include "base/metrics/histogram_macros.h" | |
20 #include "base/stl_util.h" | 22 #include "base/stl_util.h" |
21 #include "base/time/time.h" | 23 #include "base/time/time.h" |
22 #include "ui/aura/client/aura_constants.h" | 24 #include "ui/aura/client/aura_constants.h" |
23 #include "ui/aura/window.h" | 25 #include "ui/aura/window.h" |
24 #include "ui/aura/window_observer.h" | 26 #include "ui/aura/window_observer.h" |
25 #include "ui/base/class_property.h" | 27 #include "ui/base/class_property.h" |
26 #include "ui/compositor/compositor_observer.h" | 28 #include "ui/compositor/compositor_observer.h" |
27 #include "ui/compositor/layer.h" | 29 #include "ui/compositor/layer.h" |
28 #include "ui/compositor/layer_animation_observer.h" | 30 #include "ui/compositor/layer_animation_observer.h" |
29 #include "ui/compositor/layer_animation_sequence.h" | 31 #include "ui/compositor/layer_animation_sequence.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
77 // If the area didn't change, the animation is instantaneous. | 79 // If the area didn't change, the animation is instantaneous. |
78 if (delta_area == 0) | 80 if (delta_area == 0) |
79 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); | 81 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); |
80 | 82 |
81 float factor = static_cast<float>(delta_area) / static_cast<float>(max_area); | 83 float factor = static_cast<float>(delta_area) / static_cast<float>(max_area); |
82 const float kRange = kCrossFadeDurationMaxMs - kCrossFadeDurationMinMs; | 84 const float kRange = kCrossFadeDurationMaxMs - kCrossFadeDurationMinMs; |
83 return base::TimeDelta::FromMilliseconds( | 85 return base::TimeDelta::FromMilliseconds( |
84 Round64(kCrossFadeDurationMinMs + (factor * kRange))); | 86 Round64(kCrossFadeDurationMinMs + (factor * kRange))); |
85 } | 87 } |
86 | 88 |
89 class CrossFadeMetricsReporter : public ui::AnimationMetricsReporter { | |
varkha
2017/05/12 15:14:25
There was a nit in a previous similar CL to define
wutao
2017/05/12 17:46:37
I kept copying from your first code. I will make c
| |
90 void Report(int value) override { | |
91 UMA_HISTOGRAM_PERCENTAGE("Ash.Window.AnimationSmoothness.CrossFade", value); | |
92 } | |
93 }; | |
94 | |
95 base::LazyInstance<CrossFadeMetricsReporter>::Leaky g_reporter_cross_fade = | |
96 LAZY_INSTANCE_INITIALIZER; | |
97 | |
87 } // namespace | 98 } // namespace |
88 | 99 |
89 const int kCrossFadeDurationMS = 200; | 100 const int kCrossFadeDurationMS = 200; |
90 | 101 |
91 void AddLayerAnimationsForMinimize(aura::Window* window, bool show) { | 102 void AddLayerAnimationsForMinimize(aura::Window* window, bool show) { |
92 // Recalculate the transform at restore time since the launcher item may have | 103 // Recalculate the transform at restore time since the launcher item may have |
93 // moved while the window was minimized. | 104 // moved while the window was minimized. |
94 gfx::Rect bounds = window->bounds(); | 105 gfx::Rect bounds = window->bounds(); |
95 gfx::Rect target_bounds = GetMinimizeAnimationTargetBoundsInScreen(window); | 106 gfx::Rect target_bounds = GetMinimizeAnimationTargetBoundsInScreen(window); |
96 ::wm::ConvertRectFromScreen(window->parent(), &target_bounds); | 107 ::wm::ConvertRectFromScreen(window->parent(), &target_bounds); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 ui::Layer* old_layer = old_layer_owner->root(); | 323 ui::Layer* old_layer = old_layer_owner->root(); |
313 old_layer->GetAnimator()->StopAnimating(); | 324 old_layer->GetAnimator()->StopAnimating(); |
314 old_layer->SetTransform(old_transform); | 325 old_layer->SetTransform(old_transform); |
315 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); | 326 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); |
316 | 327 |
317 // Animation observer owns the old layer and deletes itself. | 328 // Animation observer owns the old layer and deletes itself. |
318 settings.AddObserver( | 329 settings.AddObserver( |
319 new CrossFadeObserver(window, std::move(old_layer_owner))); | 330 new CrossFadeObserver(window, std::move(old_layer_owner))); |
320 settings.SetTransitionDuration(duration); | 331 settings.SetTransitionDuration(duration); |
321 settings.SetTweenType(tween_type); | 332 settings.SetTweenType(tween_type); |
333 // Only add reporter to |old_layer|. | |
334 settings.SetAnimationMetricsReporter(g_reporter_cross_fade.Pointer()); | |
322 gfx::Transform out_transform; | 335 gfx::Transform out_transform; |
323 float scale_x = static_cast<float>(new_bounds.width()) / | 336 float scale_x = static_cast<float>(new_bounds.width()) / |
324 static_cast<float>(old_bounds.width()); | 337 static_cast<float>(old_bounds.width()); |
325 float scale_y = static_cast<float>(new_bounds.height()) / | 338 float scale_y = static_cast<float>(new_bounds.height()) / |
326 static_cast<float>(old_bounds.height()); | 339 static_cast<float>(old_bounds.height()); |
327 out_transform.Translate(new_bounds.x() - old_bounds.x(), | 340 out_transform.Translate(new_bounds.x() - old_bounds.x(), |
328 new_bounds.y() - old_bounds.y()); | 341 new_bounds.y() - old_bounds.y()); |
329 out_transform.Scale(scale_x, scale_y); | 342 out_transform.Scale(scale_x, scale_y); |
330 old_layer->SetTransform(out_transform); | 343 old_layer->SetTransform(out_transform); |
331 if (old_on_top) { | 344 if (old_on_top) { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
451 case SHELF_ALIGNMENT_LEFT: | 464 case SHELF_ALIGNMENT_LEFT: |
452 return gfx::Rect(work_area.x(), work_area.y(), 0, 0); | 465 return gfx::Rect(work_area.x(), work_area.y(), 0, 0); |
453 case SHELF_ALIGNMENT_RIGHT: | 466 case SHELF_ALIGNMENT_RIGHT: |
454 return gfx::Rect(work_area.right(), work_area.y(), 0, 0); | 467 return gfx::Rect(work_area.right(), work_area.y(), 0, 0); |
455 } | 468 } |
456 NOTREACHED(); | 469 NOTREACHED(); |
457 return gfx::Rect(); | 470 return gfx::Rect(); |
458 } | 471 } |
459 | 472 |
460 } // namespace ash | 473 } // namespace ash |
OLD | NEW |