| OLD | NEW | 
|---|
| 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  Loading... | 
| 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 | 
| OLD | NEW | 
|---|