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

Side by Side Diff: content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h

Issue 101223005: Plumbing explicit share groups through context creation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Better share group management Created 7 years 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
OLDNEW
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 #ifndef CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 5 #ifndef CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
6 #define CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 6 #define CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/synchronization/lock.h"
14 #include "content/common/content_export.h" 15 #include "content/common/content_export.h"
15 #include "content/common/gpu/client/command_buffer_proxy_impl.h" 16 #include "content/common/gpu/client/command_buffer_proxy_impl.h"
16 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 17 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
17 #include "third_party/WebKit/public/platform/WebString.h" 18 #include "third_party/WebKit/public/platform/WebString.h"
18 #include "ui/gfx/native_widget_types.h" 19 #include "ui/gfx/native_widget_types.h"
19 #include "ui/gl/gpu_preference.h" 20 #include "ui/gl/gpu_preference.h"
20 #include "url/gurl.h" 21 #include "url/gurl.h"
21 22
22 namespace gpu { 23 namespace gpu {
23 24
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 size_t max_transfer_buffer_size; 73 size_t max_transfer_buffer_size;
73 size_t mapped_memory_reclaim_limit; 74 size_t mapped_memory_reclaim_limit;
74 }; 75 };
75 76
76 WebGraphicsContext3DCommandBufferImpl( 77 WebGraphicsContext3DCommandBufferImpl(
77 int surface_id, 78 int surface_id,
78 const GURL& active_url, 79 const GURL& active_url,
79 GpuChannelHost* host, 80 GpuChannelHost* host,
80 const Attributes& attributes, 81 const Attributes& attributes,
81 bool bind_generates_resources, 82 bool bind_generates_resources,
82 const SharedMemoryLimits& limits); 83 const SharedMemoryLimits& limits,
84 WebGraphicsContext3DCommandBufferImpl* share_context);
83 85
84 virtual ~WebGraphicsContext3DCommandBufferImpl(); 86 virtual ~WebGraphicsContext3DCommandBufferImpl();
85 87
86 // The following 3 IDs let one uniquely identify this context. 88 // The following 3 IDs let one uniquely identify this context.
87 // Gets the GPU process ID for this context. 89 // Gets the GPU process ID for this context.
88 int GetGPUProcessID(); 90 int GetGPUProcessID();
89 91
90 CommandBufferProxyImpl* GetCommandBufferProxy() { 92 CommandBufferProxyImpl* GetCommandBufferProxy() {
91 return command_buffer_.get(); 93 return command_buffer_.get();
92 } 94 }
93 95
94 CONTENT_EXPORT gpu::ContextSupport* GetContextSupport(); 96 CONTENT_EXPORT gpu::ContextSupport* GetContextSupport();
95 97
96 gpu::gles2::GLES2Implementation* GetImplementation() { 98 gpu::gles2::GLES2Implementation* GetImplementation() {
97 return real_gl_.get(); 99 return real_gl_.get();
98 } 100 }
99 101
100 // Return true if GPU process reported context lost or there was a 102 // Return true if GPU process reported context lost or there was a
101 // problem communicating with the GPU process. 103 // problem communicating with the GPU process.
102 bool IsCommandBufferContextLost(); 104 bool IsCommandBufferContextLost();
103 105
104 // Create & initialize a WebGraphicsContext3DCommandBufferImpl. Return NULL 106 // Create & initialize a WebGraphicsContext3DCommandBufferImpl. Return NULL
105 // on any failure. 107 // on any failure.
106 static CONTENT_EXPORT WebGraphicsContext3DCommandBufferImpl* 108 static CONTENT_EXPORT WebGraphicsContext3DCommandBufferImpl*
107 CreateOffscreenContext( 109 CreateOffscreenContext(
108 GpuChannelHost* host, 110 GpuChannelHost* host,
109 const WebGraphicsContext3D::Attributes& attributes, 111 const WebGraphicsContext3D::Attributes& attributes,
110 const GURL& active_url, 112 const GURL& active_url,
111 const SharedMemoryLimits& limits); 113 const SharedMemoryLimits& limits,
114 WebGraphicsContext3D* share_context);
112 115
113 size_t GetMappedMemoryLimit() { 116 size_t GetMappedMemoryLimit() {
114 return mem_limits_.mapped_memory_reclaim_limit; 117 return mem_limits_.mapped_memory_reclaim_limit;
115 } 118 }
116 119
117 //---------------------------------------------------------------------- 120 //----------------------------------------------------------------------
118 // WebGraphicsContext3D methods 121 // WebGraphicsContext3D methods
119 122
120 // Must be called after initialize() and before any of the following methods. 123 // Must be called after initialize() and before any of the following methods.
121 // Permanently binds to the first calling thread. Returns false if the 124 // Permanently binds to the first calling thread. Returns false if the
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 SAMPLE_BUFFERS = 0x3032, 654 SAMPLE_BUFFERS = 0x3032,
652 HEIGHT = 0x3056, 655 HEIGHT = 0x3056,
653 WIDTH = 0x3057, 656 WIDTH = 0x3057,
654 NONE = 0x3038, // Attrib list = terminator 657 NONE = 0x3038, // Attrib list = terminator
655 SHARE_RESOURCES = 0x10000, 658 SHARE_RESOURCES = 0x10000,
656 BIND_GENERATES_RESOURCES = 0x10001, 659 BIND_GENERATES_RESOURCES = 0x10001,
657 FAIL_IF_MAJOR_PERF_CAVEAT = 0x10002 660 FAIL_IF_MAJOR_PERF_CAVEAT = 0x10002
658 }; 661 };
659 friend class WebGraphicsContext3DErrorMessageCallback; 662 friend class WebGraphicsContext3DErrorMessageCallback;
660 663
664 class ShareGroup : public base::RefCountedThreadSafe<ShareGroup> {
665 public:
666 ShareGroup();
667
668 WebGraphicsContext3DCommandBufferImpl* GetAnyContext() {
piman 2013/12/12 23:56:39 nit: maybe append "Locked" to these functions to m
669 // In order to ensure that the context returned is not removed while
670 // in use the share group's lock should be aquired before calling this
671 // function.
672 lock_.AssertAcquired();
673 if (contexts_.empty())
674 return NULL;
675 return contexts_.front();
676 }
677
678 void AddContext(WebGraphicsContext3DCommandBufferImpl* context) {
679 lock_.AssertAcquired();
680 contexts_.push_back(context);
681 }
682
683 void RemoveContext(WebGraphicsContext3DCommandBufferImpl* context) {
684 base::AutoLock auto_lock(lock_);
685 contexts_.erase(std::remove(contexts_.begin(), contexts_.end(), context),
686 contexts_.end());
687 }
688
689 void RemoveAllContexts() {
690 base::AutoLock auto_lock(lock_);
691 contexts_.clear();
692 }
693
694 base::Lock& lock() {
695 return lock_;
696 }
697
698 private:
699 friend class base::RefCountedThreadSafe<ShareGroup>;
700 ~ShareGroup();
701
702 std::vector<WebGraphicsContext3DCommandBufferImpl*> contexts_;
703 base::Lock lock_;
704
705 DISALLOW_COPY_AND_ASSIGN(ShareGroup);
706 };
707
661 // Initialize the underlying GL context. May be called multiple times; second 708 // Initialize the underlying GL context. May be called multiple times; second
662 // and subsequent calls are ignored. Must be called from the thread that is 709 // and subsequent calls are ignored. Must be called from the thread that is
663 // going to use this object to issue GL commands (which might not be the main 710 // going to use this object to issue GL commands (which might not be the main
664 // thread). 711 // thread).
665 bool MaybeInitializeGL(); 712 bool MaybeInitializeGL();
666 713
667 bool InitializeCommandBuffer(bool onscreen); 714 bool InitializeCommandBuffer(bool onscreen,
715 WebGraphicsContext3DCommandBufferImpl* share_context);
668 716
669 void Destroy(); 717 void Destroy();
670 718
671 // Create a CommandBufferProxy that renders directly to a view. The view and 719 // Create a CommandBufferProxy that renders directly to a view. The view and
672 // the associated window must not be destroyed until the returned 720 // the associated window must not be destroyed until the returned
673 // CommandBufferProxy has been destroyed, otherwise the GPU process might 721 // CommandBufferProxy has been destroyed, otherwise the GPU process might
674 // attempt to render to an invalid window handle. 722 // attempt to render to an invalid window handle.
675 // 723 //
676 // NOTE: on Mac OS X, this entry point is only used to set up the 724 // NOTE: on Mac OS X, this entry point is only used to set up the
677 // accelerated compositor's output. On this platform, we actually pass 725 // accelerated compositor's output. On this platform, we actually pass
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_helper_; 764 scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_helper_;
717 scoped_ptr<gpu::TransferBuffer> transfer_buffer_; 765 scoped_ptr<gpu::TransferBuffer> transfer_buffer_;
718 gpu::gles2::GLES2Interface* gl_; 766 gpu::gles2::GLES2Interface* gl_;
719 scoped_ptr<gpu::gles2::GLES2Implementation> real_gl_; 767 scoped_ptr<gpu::gles2::GLES2Implementation> real_gl_;
720 scoped_ptr<gpu::gles2::GLES2Interface> trace_gl_; 768 scoped_ptr<gpu::gles2::GLES2Interface> trace_gl_;
721 Error last_error_; 769 Error last_error_;
722 bool bind_generates_resources_; 770 bool bind_generates_resources_;
723 SharedMemoryLimits mem_limits_; 771 SharedMemoryLimits mem_limits_;
724 772
725 uint32_t flush_id_; 773 uint32_t flush_id_;
774 scoped_refptr<ShareGroup> share_group_;
726 }; 775 };
727 776
728 } // namespace content 777 } // namespace content
729 778
730 #endif // CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 779 #endif // CONTENT_COMMON_GPU_CLIENT_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698