Chromium Code Reviews| Index: services/ui/demo/mus_demo.cc |
| diff --git a/services/ui/demo/mus_demo.cc b/services/ui/demo/mus_demo.cc |
| index 0fbcd356c25475ef3794f4687541853891d9582f..f80c64fbaae611af6df9d0e7f61c3168bbb5d628 100644 |
| --- a/services/ui/demo/mus_demo.cc |
| +++ b/services/ui/demo/mus_demo.cc |
| @@ -67,6 +67,38 @@ void DrawSquare(const gfx::Rect& bounds, double angle, SkCanvas* canvas) { |
| } // namespace |
| +class MusDemo::WindowTreeData { |
| + public: |
| + explicit WindowTreeData( |
| + std::unique_ptr<aura::WindowTreeHostMus> window_tree_host); |
| + ~WindowTreeData(); |
| + |
| + private: |
| + // Draws one frame, incrementing the rotation angle. |
| + void DrawFrame(); |
| + |
| + // The Window tree host corresponding to this data. |
| + std::unique_ptr<aura::WindowTreeHostMus> window_tree_host_; |
| + |
| + // Root window of the window tree host. |
| + aura::Window* root_window_ = nullptr; |
|
sky
2017/02/09 20:53:16
Why do you need to cache this? window_tree_host_->
|
| + |
| + // Window to which we draw the bitmap. |
| + std::unique_ptr<aura::Window> bitmap_window_; |
|
sky
2017/02/09 20:53:16
Windows are generally owned by their parent. Are y
|
| + |
| + // Destroys itself when the window gets destroyed. |
| + aura_extra::ImageWindowDelegate* window_delegate_ = nullptr; |
| + |
| + // Timer for calling DrawFrame(). |
| + base::RepeatingTimer timer_; |
| + |
| + // Current rotation angle for drawing. |
| + double angle_ = 0.0; |
| + |
| + // Last time a frame was drawn. |
| + base::TimeTicks last_draw_frame_time_; |
| +}; |
|
sky
2017/02/09 20:53:16
DISALLOW...
|
| + |
| MusDemo::MusDemo() {} |
| MusDemo::~MusDemo() { |
| @@ -110,9 +142,8 @@ void MusDemo::OnEmbedRootDestroyed(aura::WindowTreeHostMus* window_tree_host) { |
| } |
| void MusDemo::OnLostConnection(aura::WindowTreeClient* client) { |
| - root_window_ = nullptr; |
| window_tree_client_.reset(); |
| - timer_.Stop(); |
| + window_tree_data_.reset(); |
| } |
| void MusDemo::OnPointerEventObserved(const PointerEvent& event, |
| @@ -157,8 +188,13 @@ void MusDemo::OnWmWillCreateDisplay(const display::Display& display) { |
| void MusDemo::OnWmNewDisplay( |
| std::unique_ptr<aura::WindowTreeHostMus> window_tree_host, |
| const display::Display& display) { |
| - DCHECK(!root_window_); // Only support one display. |
| + DCHECK(!window_tree_data_); // Only support one display. |
| + window_tree_data_ = |
| + base::MakeUnique<WindowTreeData>(std::move(window_tree_host)); |
| +} |
| +MusDemo::WindowTreeData::WindowTreeData( |
| + std::unique_ptr<aura::WindowTreeHostMus> window_tree_host) { |
| window_tree_host->InitHost(); |
| window_tree_host->Show(); |
| root_window_ = window_tree_host->window(); |
| @@ -178,10 +214,14 @@ void MusDemo::OnWmNewDisplay( |
| // Draw initial frame and start the timer to regularly draw frames. |
| DrawFrame(); |
| timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kFrameDelay), |
| - base::Bind(&MusDemo::DrawFrame, base::Unretained(this))); |
| + base::Bind(&WindowTreeData::DrawFrame, base::Unretained(this))); |
| } |
| void MusDemo::OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) { |
| + window_tree_data_.reset(); |
| +} |
| + |
| +MusDemo::WindowTreeData::~WindowTreeData() { |
| timer_.Stop(); |
| root_window_->RemoveChild(bitmap_window_.get()); |
| bitmap_window_.reset(); |
| @@ -211,7 +251,7 @@ bool MusDemo::IsWindowActive(aura::Window* window) { return false; } |
| void MusDemo::OnWmDeactivateWindow(aura::Window* window) {} |
| -void MusDemo::DrawFrame() { |
| +void MusDemo::WindowTreeData::DrawFrame() { |
| base::TimeTicks now = base::TimeTicks::Now(); |
| VLOG(1) << (now - last_draw_frame_time_).InMilliseconds() |