| 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 "content/browser/renderer_host/image_transport_factory.h" | 5 #include "content/browser/renderer_host/image_transport_factory.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 } | 72 } |
| 73 | 73 |
| 74 virtual GLHelper* GetGLHelper() OVERRIDE { | 74 virtual GLHelper* GetGLHelper() OVERRIDE { |
| 75 return NULL; | 75 return NULL; |
| 76 } | 76 } |
| 77 | 77 |
| 78 virtual uint32 InsertSyncPoint() OVERRIDE { | 78 virtual uint32 InsertSyncPoint() OVERRIDE { |
| 79 return 0; | 79 return 0; |
| 80 } | 80 } |
| 81 | 81 |
| 82 virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE { |
| 83 } |
| 84 |
| 82 // We don't generate lost context events, so we don't need to keep track of | 85 // We don't generate lost context events, so we don't need to keep track of |
| 83 // observers | 86 // observers |
| 84 virtual void AddObserver(ImageTransportFactoryObserver* observer) OVERRIDE { | 87 virtual void AddObserver(ImageTransportFactoryObserver* observer) OVERRIDE { |
| 85 } | 88 } |
| 86 | 89 |
| 87 virtual void RemoveObserver( | 90 virtual void RemoveObserver( |
| 88 ImageTransportFactoryObserver* observer) OVERRIDE { | 91 ImageTransportFactoryObserver* observer) OVERRIDE { |
| 89 } | 92 } |
| 90 | 93 |
| 91 private: | 94 private: |
| 92 DISALLOW_COPY_AND_ASSIGN(DefaultTransportFactory); | 95 DISALLOW_COPY_AND_ASSIGN(DefaultTransportFactory); |
| 93 }; | 96 }; |
| 94 | 97 |
| 95 class ImageTransportClientTexture : public ui::Texture { | 98 class ImageTransportClientTexture : public ui::Texture { |
| 96 public: | 99 public: |
| 97 ImageTransportClientTexture( | 100 ImageTransportClientTexture( |
| 98 WebKit::WebGraphicsContext3D* host_context, | 101 WebKit::WebGraphicsContext3D* host_context, |
| 99 const gfx::Size& size, | 102 const gfx::Size& size, |
| 103 float device_scale_factor, |
| 100 uint64 surface_id) | 104 uint64 surface_id) |
| 101 : ui::Texture(true, size), | 105 : ui::Texture(true, size, device_scale_factor), |
| 102 host_context_(host_context) { | 106 host_context_(host_context) { |
| 103 set_texture_id(surface_id); | 107 set_texture_id(surface_id); |
| 104 } | 108 } |
| 105 | 109 |
| 106 virtual WebKit::WebGraphicsContext3D* HostContext3D() { | 110 virtual WebKit::WebGraphicsContext3D* HostContext3D() { |
| 107 return host_context_; | 111 return host_context_; |
| 108 } | 112 } |
| 109 | 113 |
| 110 protected: | 114 protected: |
| 111 virtual ~ImageTransportClientTexture() {} | 115 virtual ~ImageTransportClientTexture() {} |
| 112 | 116 |
| 113 private: | 117 private: |
| 114 // A raw pointer. This |ImageTransportClientTexture| will be destroyed | 118 // A raw pointer. This |ImageTransportClientTexture| will be destroyed |
| 115 // before the |host_context_| via | 119 // before the |host_context_| via |
| 116 // |ImageTransportFactoryObserver::OnLostContext()| handlers. | 120 // |ImageTransportFactoryObserver::OnLostContext()| handlers. |
| 117 WebKit::WebGraphicsContext3D* host_context_; | 121 WebKit::WebGraphicsContext3D* host_context_; |
| 118 | 122 |
| 119 DISALLOW_COPY_AND_ASSIGN(ImageTransportClientTexture); | 123 DISALLOW_COPY_AND_ASSIGN(ImageTransportClientTexture); |
| 120 }; | 124 }; |
| 121 | 125 |
| 122 class OwnedTexture : public ui::Texture, ImageTransportFactoryObserver { | 126 class OwnedTexture : public ui::Texture, ImageTransportFactoryObserver { |
| 123 public: | 127 public: |
| 124 OwnedTexture(WebKit::WebGraphicsContext3D* host_context, | 128 OwnedTexture(WebKit::WebGraphicsContext3D* host_context, |
| 125 const gfx::Size& size, | 129 const gfx::Size& size, |
| 130 float device_scale_factor, |
| 126 unsigned int texture_id) | 131 unsigned int texture_id) |
| 127 : ui::Texture(true, size), | 132 : ui::Texture(true, size, device_scale_factor), |
| 128 host_context_(host_context) { | 133 host_context_(host_context) { |
| 129 ImageTransportFactory::GetInstance()->AddObserver(this); | 134 ImageTransportFactory::GetInstance()->AddObserver(this); |
| 130 set_texture_id(texture_id); | 135 set_texture_id(texture_id); |
| 131 } | 136 } |
| 132 | 137 |
| 133 // ui::Texture overrides: | 138 // ui::Texture overrides: |
| 134 virtual WebKit::WebGraphicsContext3D* HostContext3D() OVERRIDE { | 139 virtual WebKit::WebGraphicsContext3D* HostContext3D() OVERRIDE { |
| 135 return host_context_; | 140 return host_context_; |
| 136 } | 141 } |
| 137 | 142 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 | 205 |
| 201 DISALLOW_COPY_AND_ASSIGN(CompositorSwapClient); | 206 DISALLOW_COPY_AND_ASSIGN(CompositorSwapClient); |
| 202 }; | 207 }; |
| 203 | 208 |
| 204 class GpuProcessTransportFactory : | 209 class GpuProcessTransportFactory : |
| 205 public ui::ContextFactory, | 210 public ui::ContextFactory, |
| 206 public ImageTransportFactory, | 211 public ImageTransportFactory, |
| 207 public WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback { | 212 public WebKit::WebGraphicsContext3D::WebGraphicsContextLostCallback { |
| 208 public: | 213 public: |
| 209 GpuProcessTransportFactory() | 214 GpuProcessTransportFactory() |
| 210 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)) { | 215 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)), |
| 216 device_scale_factor_(1.0f) { |
| 211 } | 217 } |
| 212 | 218 |
| 213 virtual ~GpuProcessTransportFactory() { | 219 virtual ~GpuProcessTransportFactory() { |
| 214 DCHECK(per_compositor_data_.empty()); | 220 DCHECK(per_compositor_data_.empty()); |
| 215 } | 221 } |
| 216 | 222 |
| 217 virtual WebKit::WebGraphicsContext3D* CreateContext( | 223 virtual WebKit::WebGraphicsContext3D* CreateContext( |
| 218 ui::Compositor* compositor) OVERRIDE { | 224 ui::Compositor* compositor) OVERRIDE { |
| 219 PerCompositorData* data = per_compositor_data_[compositor]; | 225 PerCompositorData* data = per_compositor_data_[compositor]; |
| 220 if (!data) | 226 if (!data) |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 shared_context_->flush(); | 285 shared_context_->flush(); |
| 280 } | 286 } |
| 281 | 287 |
| 282 virtual scoped_refptr<ui::Texture> CreateTransportClient( | 288 virtual scoped_refptr<ui::Texture> CreateTransportClient( |
| 283 const gfx::Size& size, | 289 const gfx::Size& size, |
| 284 uint64 transport_handle) { | 290 uint64 transport_handle) { |
| 285 if (!shared_context_.get()) | 291 if (!shared_context_.get()) |
| 286 return NULL; | 292 return NULL; |
| 287 scoped_refptr<ImageTransportClientTexture> image( | 293 scoped_refptr<ImageTransportClientTexture> image( |
| 288 new ImageTransportClientTexture(shared_context_.get(), | 294 new ImageTransportClientTexture(shared_context_.get(), |
| 289 size, transport_handle)); | 295 size, device_scale_factor_, |
| 296 transport_handle)); |
| 290 return image; | 297 return image; |
| 291 } | 298 } |
| 292 | 299 |
| 293 virtual scoped_refptr<ui::Texture> CreateOwnedTexture( | 300 virtual scoped_refptr<ui::Texture> CreateOwnedTexture( |
| 294 const gfx::Size& size, | 301 const gfx::Size& size, |
| 295 unsigned int texture_id) OVERRIDE { | 302 unsigned int texture_id) OVERRIDE { |
| 296 if (!shared_context_.get()) | 303 if (!shared_context_.get()) |
| 297 return NULL; | 304 return NULL; |
| 298 scoped_refptr<OwnedTexture> image( | 305 scoped_refptr<OwnedTexture> image( |
| 299 new OwnedTexture(shared_context_.get(), size, texture_id)); | 306 new OwnedTexture(shared_context_.get(), size, device_scale_factor_, |
| 307 texture_id)); |
| 300 return image; | 308 return image; |
| 301 } | 309 } |
| 302 | 310 |
| 303 virtual GLHelper* GetGLHelper() { | 311 virtual GLHelper* GetGLHelper() { |
| 304 if (!gl_helper_.get()) { | 312 if (!gl_helper_.get()) { |
| 305 CreateSharedContextLazy(); | 313 CreateSharedContextLazy(); |
| 306 WebKit::WebGraphicsContext3D* context_for_thread = | 314 WebKit::WebGraphicsContext3D* context_for_thread = |
| 307 CreateOffscreenContext(); | 315 CreateOffscreenContext(); |
| 308 if (!context_for_thread) | 316 if (!context_for_thread) |
| 309 return NULL; | 317 return NULL; |
| 310 gl_helper_.reset(new GLHelper(shared_context_.get(), | 318 gl_helper_.reset(new GLHelper(shared_context_.get(), |
| 311 context_for_thread)); | 319 context_for_thread)); |
| 312 } | 320 } |
| 313 return gl_helper_.get(); | 321 return gl_helper_.get(); |
| 314 } | 322 } |
| 315 | 323 |
| 316 virtual uint32 InsertSyncPoint() OVERRIDE { | 324 virtual uint32 InsertSyncPoint() OVERRIDE { |
| 317 if (!shared_context_.get()) | 325 if (!shared_context_.get()) |
| 318 return 0; | 326 return 0; |
| 319 return shared_context_->insertSyncPoint(); | 327 return shared_context_->insertSyncPoint(); |
| 320 } | 328 } |
| 321 | 329 |
| 330 virtual void SetDeviceScaleFactor(float device_scale_factor) OVERRIDE { |
| 331 device_scale_factor_ = device_scale_factor; |
| 332 } |
| 333 |
| 322 virtual void AddObserver(ImageTransportFactoryObserver* observer) { | 334 virtual void AddObserver(ImageTransportFactoryObserver* observer) { |
| 323 observer_list_.AddObserver(observer); | 335 observer_list_.AddObserver(observer); |
| 324 } | 336 } |
| 325 | 337 |
| 326 virtual void RemoveObserver(ImageTransportFactoryObserver* observer) { | 338 virtual void RemoveObserver(ImageTransportFactoryObserver* observer) { |
| 327 observer_list_.RemoveObserver(observer); | 339 observer_list_.RemoveObserver(observer); |
| 328 } | 340 } |
| 329 | 341 |
| 330 // WebGraphicsContextLostCallback implementation, called for the shared | 342 // WebGraphicsContextLostCallback implementation, called for the shared |
| 331 // context. | 343 // context. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 observer_list_, | 449 observer_list_, |
| 438 OnLostResources()); | 450 OnLostResources()); |
| 439 } | 451 } |
| 440 | 452 |
| 441 typedef std::map<ui::Compositor*, PerCompositorData*> PerCompositorDataMap; | 453 typedef std::map<ui::Compositor*, PerCompositorData*> PerCompositorDataMap; |
| 442 PerCompositorDataMap per_compositor_data_; | 454 PerCompositorDataMap per_compositor_data_; |
| 443 scoped_ptr<GLHelper> gl_helper_; | 455 scoped_ptr<GLHelper> gl_helper_; |
| 444 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> shared_context_; | 456 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> shared_context_; |
| 445 ObserverList<ImageTransportFactoryObserver> observer_list_; | 457 ObserverList<ImageTransportFactoryObserver> observer_list_; |
| 446 base::WeakPtrFactory<GpuProcessTransportFactory> callback_factory_; | 458 base::WeakPtrFactory<GpuProcessTransportFactory> callback_factory_; |
| 459 float device_scale_factor_; |
| 447 | 460 |
| 448 DISALLOW_COPY_AND_ASSIGN(GpuProcessTransportFactory); | 461 DISALLOW_COPY_AND_ASSIGN(GpuProcessTransportFactory); |
| 449 }; | 462 }; |
| 450 | 463 |
| 451 void CompositorSwapClient::OnLostContext() { | 464 void CompositorSwapClient::OnLostContext() { |
| 452 factory_->OnLostContext(compositor_); | 465 factory_->OnLostContext(compositor_); |
| 453 // Note: previous line destroyed this. Don't access members from now on. | 466 // Note: previous line destroyed this. Don't access members from now on. |
| 454 } | 467 } |
| 455 | 468 |
| 456 WebKit::WebGraphicsContext3D* CreateTestContext() { | 469 WebKit::WebGraphicsContext3D* CreateTestContext() { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 482 void ImageTransportFactory::Terminate() { | 495 void ImageTransportFactory::Terminate() { |
| 483 ui::ContextFactory::SetInstance(NULL); | 496 ui::ContextFactory::SetInstance(NULL); |
| 484 delete g_factory; | 497 delete g_factory; |
| 485 g_factory = NULL; | 498 g_factory = NULL; |
| 486 } | 499 } |
| 487 | 500 |
| 488 // static | 501 // static |
| 489 ImageTransportFactory* ImageTransportFactory::GetInstance() { | 502 ImageTransportFactory* ImageTransportFactory::GetInstance() { |
| 490 return g_factory; | 503 return g_factory; |
| 491 } | 504 } |
| OLD | NEW |