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

Side by Side Diff: cc/surfaces/display.cc

Issue 432093003: Enqueuing new frames in a Surface should cause Displays to reaggregate it (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "cc/surfaces/display.h" 5 #include "cc/surfaces/display.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/output/compositor_frame_ack.h" 10 #include "cc/output/compositor_frame_ack.h"
11 #include "cc/output/direct_renderer.h" 11 #include "cc/output/direct_renderer.h"
12 #include "cc/output/gl_renderer.h" 12 #include "cc/output/gl_renderer.h"
13 #include "cc/output/software_renderer.h" 13 #include "cc/output/software_renderer.h"
14 #include "cc/surfaces/display_client.h" 14 #include "cc/surfaces/display_client.h"
15 #include "cc/surfaces/surface.h" 15 #include "cc/surfaces/surface.h"
16 #include "cc/surfaces/surface_aggregator.h" 16 #include "cc/surfaces/surface_aggregator.h"
17 #include "cc/surfaces/surface_manager.h"
17 18
18 namespace cc { 19 namespace cc {
19 20
20 Display::Display(DisplayClient* client, 21 Display::Display(DisplayClient* client,
21 SurfaceManager* manager, 22 SurfaceManager* manager,
22 SharedBitmapManager* bitmap_manager) 23 SharedBitmapManager* bitmap_manager)
23 : client_(client), manager_(manager), bitmap_manager_(bitmap_manager) { 24 : client_(client), manager_(manager), bitmap_manager_(bitmap_manager) {
25 manager_->AddObserver(this);
24 } 26 }
25 27
26 Display::~Display() { 28 Display::~Display() {
29 manager_->RemoveObserver(this);
27 } 30 }
28 31
29 void Display::Resize(SurfaceId id, const gfx::Size& size) { 32 void Display::Resize(SurfaceId id, const gfx::Size& size) {
30 current_surface_id_ = id; 33 current_surface_id_ = id;
31 current_surface_size_ = size; 34 current_surface_size_ = size;
35 client_->DisplayDamaged();
32 } 36 }
33 37
34 void Display::InitializeOutputSurface() { 38 void Display::InitializeOutputSurface() {
35 if (output_surface_) 39 if (output_surface_)
36 return; 40 return;
37 scoped_ptr<OutputSurface> output_surface = client_->CreateOutputSurface(); 41 scoped_ptr<OutputSurface> output_surface = client_->CreateOutputSurface();
38 if (!output_surface->BindToClient(this)) 42 if (!output_surface->BindToClient(this))
39 return; 43 return;
40 44
41 int highp_threshold_min = 0; 45 int highp_threshold_min = 0;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 } 82 }
79 83
80 bool Display::Draw() { 84 bool Display::Draw() {
81 if (current_surface_id_.is_null()) 85 if (current_surface_id_.is_null())
82 return false; 86 return false;
83 87
84 InitializeOutputSurface(); 88 InitializeOutputSurface();
85 if (!output_surface_) 89 if (!output_surface_)
86 return false; 90 return false;
87 91
92 contained_surfaces_.clear();
93
88 scoped_ptr<CompositorFrame> frame = 94 scoped_ptr<CompositorFrame> frame =
89 aggregator_->Aggregate(current_surface_id_); 95 aggregator_->Aggregate(current_surface_id_, &contained_surfaces_);
90 if (!frame) 96 if (!frame)
91 return false; 97 return false;
92 98
93 TRACE_EVENT0("cc", "Display::Draw"); 99 TRACE_EVENT0("cc", "Display::Draw");
94 DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); 100 DelegatedFrameData* frame_data = frame->delegated_frame_data.get();
95 101
96 // Only reshape when we know we are going to draw. Otherwise, the reshape 102 // Only reshape when we know we are going to draw. Otherwise, the reshape
97 // can leave the window at the wrong size if we never draw and the proper 103 // can leave the window at the wrong size if we never draw and the proper
98 // viewport size is never set. 104 // viewport size is never set.
99 output_surface_->Reshape(current_surface_size_, 1.f); 105 output_surface_->Reshape(current_surface_size_, 1.f);
100 float device_scale_factor = 1.0f; 106 float device_scale_factor = 1.0f;
101 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_); 107 gfx::Rect device_viewport_rect = gfx::Rect(current_surface_size_);
102 gfx::Rect device_clip_rect = device_viewport_rect; 108 gfx::Rect device_clip_rect = device_viewport_rect;
103 bool disable_picture_quad_image_filtering = false; 109 bool disable_picture_quad_image_filtering = false;
104 110
105 renderer_->DecideRenderPassAllocationsForFrame(frame_data->render_pass_list); 111 renderer_->DecideRenderPassAllocationsForFrame(frame_data->render_pass_list);
106 renderer_->DrawFrame(&frame_data->render_pass_list, 112 renderer_->DrawFrame(&frame_data->render_pass_list,
107 device_scale_factor, 113 device_scale_factor,
108 device_viewport_rect, 114 device_viewport_rect,
109 device_clip_rect, 115 device_clip_rect,
110 disable_picture_quad_image_filtering); 116 disable_picture_quad_image_filtering);
111 CompositorFrameMetadata metadata; 117 CompositorFrameMetadata metadata;
112 renderer_->SwapBuffers(metadata); 118 renderer_->SwapBuffers(metadata);
113 return true; 119 return true;
114 } 120 }
115 121
122 void Display::OnSurfaceDamaged(SurfaceId surface) {
123 if (contained_surfaces_.find(surface) != contained_surfaces_.end())
124 client_->DisplayDamaged();
125 }
126
116 SurfaceId Display::CurrentSurfaceId() { 127 SurfaceId Display::CurrentSurfaceId() {
117 return current_surface_id_; 128 return current_surface_id_;
118 } 129 }
119 130
120 } // namespace cc 131 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display.h ('k') | cc/surfaces/display_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698