OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "gpu/command_buffer/service/async_pixel_transfer_manager_sync.h" | 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_sync.h" |
6 | 6 |
7 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" | 7 #include "gpu/command_buffer/service/async_pixel_transfer_delegate.h" |
8 | 8 |
9 namespace gpu { | 9 namespace gpu { |
10 | 10 |
11 namespace { | |
12 | |
13 class AsyncPixelTransferStateImpl : public AsyncPixelTransferState { | |
14 public: | |
15 AsyncPixelTransferStateImpl() {} | |
16 | |
17 // Implement AsyncPixelTransferState: | |
18 virtual bool TransferIsInProgress() OVERRIDE { | |
19 return false; | |
20 } | |
21 | |
22 private: | |
23 virtual ~AsyncPixelTransferStateImpl() {} | |
24 }; | |
25 | |
26 } // namespace | |
27 | |
28 // Class which handles async pixel transfers synchronously. | 11 // Class which handles async pixel transfers synchronously. |
29 class AsyncPixelTransferDelegateSync : public AsyncPixelTransferDelegate { | 12 class AsyncPixelTransferDelegateSync : public AsyncPixelTransferDelegate { |
30 public: | 13 public: |
31 explicit AsyncPixelTransferDelegateSync( | 14 explicit AsyncPixelTransferDelegateSync( |
32 AsyncPixelTransferManagerSync::SharedState* shared_state); | 15 AsyncPixelTransferManagerSync::SharedState* shared_state); |
33 virtual ~AsyncPixelTransferDelegateSync(); | 16 virtual ~AsyncPixelTransferDelegateSync(); |
34 | 17 |
35 // Implement AsyncPixelTransferDelegate: | 18 // Implement AsyncPixelTransferDelegate: |
36 virtual AsyncPixelTransferState* CreatePixelTransferState( | |
37 GLuint texture_id, | |
38 const AsyncTexImage2DParams& define_params) OVERRIDE; | |
39 virtual void AsyncTexImage2D( | 19 virtual void AsyncTexImage2D( |
40 AsyncPixelTransferState* state, | |
41 const AsyncTexImage2DParams& tex_params, | 20 const AsyncTexImage2DParams& tex_params, |
42 const AsyncMemoryParams& mem_params, | 21 const AsyncMemoryParams& mem_params, |
43 const base::Closure& bind_callback) OVERRIDE; | 22 const base::Closure& bind_callback) OVERRIDE; |
44 virtual void AsyncTexSubImage2D( | 23 virtual void AsyncTexSubImage2D( |
45 AsyncPixelTransferState* transfer_state, | |
46 const AsyncTexSubImage2DParams& tex_params, | 24 const AsyncTexSubImage2DParams& tex_params, |
47 const AsyncMemoryParams& mem_params) OVERRIDE; | 25 const AsyncMemoryParams& mem_params) OVERRIDE; |
48 virtual void WaitForTransferCompletion( | 26 virtual bool TransferIsInProgress() OVERRIDE; |
49 AsyncPixelTransferState* state) OVERRIDE; | 27 virtual void WaitForTransferCompletion() OVERRIDE; |
50 | 28 |
51 private: | 29 private: |
52 // Safe to hold a raw pointer because SharedState is owned by the Manager | 30 // Safe to hold a raw pointer because SharedState is owned by the Manager |
53 // which owns the Delegate. | 31 // which owns the Delegate. |
54 AsyncPixelTransferManagerSync::SharedState* shared_state_; | 32 AsyncPixelTransferManagerSync::SharedState* shared_state_; |
55 | 33 |
56 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateSync); | 34 DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegateSync); |
57 }; | 35 }; |
58 | 36 |
59 AsyncPixelTransferDelegateSync::AsyncPixelTransferDelegateSync( | 37 AsyncPixelTransferDelegateSync::AsyncPixelTransferDelegateSync( |
60 AsyncPixelTransferManagerSync::SharedState* shared_state) | 38 AsyncPixelTransferManagerSync::SharedState* shared_state) |
61 : shared_state_(shared_state) {} | 39 : shared_state_(shared_state) {} |
62 | 40 |
63 AsyncPixelTransferDelegateSync::~AsyncPixelTransferDelegateSync() {} | 41 AsyncPixelTransferDelegateSync::~AsyncPixelTransferDelegateSync() {} |
64 | 42 |
65 AsyncPixelTransferState* AsyncPixelTransferDelegateSync:: | |
66 CreatePixelTransferState(GLuint texture_id, | |
67 const AsyncTexImage2DParams& define_params) { | |
68 return new AsyncPixelTransferStateImpl; | |
69 } | |
70 | |
71 void AsyncPixelTransferDelegateSync::AsyncTexImage2D( | 43 void AsyncPixelTransferDelegateSync::AsyncTexImage2D( |
72 AsyncPixelTransferState* transfer_state, | |
73 const AsyncTexImage2DParams& tex_params, | 44 const AsyncTexImage2DParams& tex_params, |
74 const AsyncMemoryParams& mem_params, | 45 const AsyncMemoryParams& mem_params, |
75 const base::Closure& bind_callback) { | 46 const base::Closure& bind_callback) { |
76 // Save the define params to return later during deferred | 47 // Save the define params to return later during deferred |
77 // binding of the transfer texture. | 48 // binding of the transfer texture. |
78 DCHECK(transfer_state); | |
79 void* data = GetAddress(mem_params); | 49 void* data = GetAddress(mem_params); |
80 glTexImage2D( | 50 glTexImage2D( |
81 tex_params.target, | 51 tex_params.target, |
82 tex_params.level, | 52 tex_params.level, |
83 tex_params.internal_format, | 53 tex_params.internal_format, |
84 tex_params.width, | 54 tex_params.width, |
85 tex_params.height, | 55 tex_params.height, |
86 tex_params.border, | 56 tex_params.border, |
87 tex_params.format, | 57 tex_params.format, |
88 tex_params.type, | 58 tex_params.type, |
89 data); | 59 data); |
90 // The texture is already fully bound so just call it now. | 60 // The texture is already fully bound so just call it now. |
91 bind_callback.Run(); | 61 bind_callback.Run(); |
92 } | 62 } |
93 | 63 |
94 void AsyncPixelTransferDelegateSync::AsyncTexSubImage2D( | 64 void AsyncPixelTransferDelegateSync::AsyncTexSubImage2D( |
95 AsyncPixelTransferState* transfer_state, | |
96 const AsyncTexSubImage2DParams& tex_params, | 65 const AsyncTexSubImage2DParams& tex_params, |
97 const AsyncMemoryParams& mem_params) { | 66 const AsyncMemoryParams& mem_params) { |
98 void* data = GetAddress(mem_params); | 67 void* data = GetAddress(mem_params); |
99 DCHECK(transfer_state); | |
100 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); | 68 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); |
101 glTexSubImage2D( | 69 glTexSubImage2D( |
102 tex_params.target, | 70 tex_params.target, |
103 tex_params.level, | 71 tex_params.level, |
104 tex_params.xoffset, | 72 tex_params.xoffset, |
105 tex_params.yoffset, | 73 tex_params.yoffset, |
106 tex_params.width, | 74 tex_params.width, |
107 tex_params.height, | 75 tex_params.height, |
108 tex_params.format, | 76 tex_params.format, |
109 tex_params.type, | 77 tex_params.type, |
110 data); | 78 data); |
111 shared_state_->texture_upload_count++; | 79 shared_state_->texture_upload_count++; |
112 shared_state_->total_texture_upload_time += | 80 shared_state_->total_texture_upload_time += |
113 base::TimeTicks::HighResNow() - begin_time; | 81 base::TimeTicks::HighResNow() - begin_time; |
114 } | 82 } |
115 | 83 |
116 void AsyncPixelTransferDelegateSync::WaitForTransferCompletion( | 84 bool AsyncPixelTransferDelegateSync::TransferIsInProgress() { |
117 AsyncPixelTransferState* state) { | 85 // Already done. |
| 86 return false; |
| 87 } |
| 88 |
| 89 void AsyncPixelTransferDelegateSync::WaitForTransferCompletion() { |
118 // Already done. | 90 // Already done. |
119 } | 91 } |
120 | 92 |
121 AsyncPixelTransferManagerSync::SharedState::SharedState() | 93 AsyncPixelTransferManagerSync::SharedState::SharedState() |
122 : texture_upload_count(0) {} | 94 : texture_upload_count(0) {} |
123 | 95 |
124 AsyncPixelTransferManagerSync::SharedState::~SharedState() {} | 96 AsyncPixelTransferManagerSync::SharedState::~SharedState() {} |
125 | 97 |
126 AsyncPixelTransferManagerSync::AsyncPixelTransferManagerSync() | 98 AsyncPixelTransferManagerSync::AsyncPixelTransferManagerSync() {} |
127 : delegate_(new AsyncPixelTransferDelegateSync(&shared_state_)) {} | |
128 | 99 |
129 AsyncPixelTransferManagerSync::~AsyncPixelTransferManagerSync() {} | 100 AsyncPixelTransferManagerSync::~AsyncPixelTransferManagerSync() {} |
130 | 101 |
131 void AsyncPixelTransferManagerSync::BindCompletedAsyncTransfers() { | 102 void AsyncPixelTransferManagerSync::BindCompletedAsyncTransfers() { |
132 // Everything is already bound. | 103 // Everything is already bound. |
133 } | 104 } |
134 | 105 |
135 void AsyncPixelTransferManagerSync::AsyncNotifyCompletion( | 106 void AsyncPixelTransferManagerSync::AsyncNotifyCompletion( |
136 const AsyncMemoryParams& mem_params, | 107 const AsyncMemoryParams& mem_params, |
137 const CompletionCallback& callback) { | 108 const CompletionCallback& callback) { |
138 callback.Run(mem_params); | 109 callback.Run(mem_params); |
139 } | 110 } |
140 | 111 |
141 uint32 AsyncPixelTransferManagerSync::GetTextureUploadCount() { | 112 uint32 AsyncPixelTransferManagerSync::GetTextureUploadCount() { |
142 return shared_state_.texture_upload_count; | 113 return shared_state_.texture_upload_count; |
143 } | 114 } |
144 | 115 |
145 base::TimeDelta AsyncPixelTransferManagerSync::GetTotalTextureUploadTime() { | 116 base::TimeDelta AsyncPixelTransferManagerSync::GetTotalTextureUploadTime() { |
146 return shared_state_.total_texture_upload_time; | 117 return shared_state_.total_texture_upload_time; |
147 } | 118 } |
148 | 119 |
149 void AsyncPixelTransferManagerSync::ProcessMorePendingTransfers() { | 120 void AsyncPixelTransferManagerSync::ProcessMorePendingTransfers() { |
150 } | 121 } |
151 | 122 |
152 bool AsyncPixelTransferManagerSync::NeedsProcessMorePendingTransfers() { | 123 bool AsyncPixelTransferManagerSync::NeedsProcessMorePendingTransfers() { |
153 return false; | 124 return false; |
154 } | 125 } |
155 | 126 |
156 AsyncPixelTransferDelegate* | 127 AsyncPixelTransferDelegate* |
157 AsyncPixelTransferManagerSync::GetAsyncPixelTransferDelegate() { | 128 AsyncPixelTransferManagerSync::CreatePixelTransferDelegateImpl( |
158 return delegate_.get(); | 129 gles2::TextureRef* ref, |
| 130 const AsyncTexImage2DParams& define_params) { |
| 131 return new AsyncPixelTransferDelegateSync(&shared_state_); |
159 } | 132 } |
160 | 133 |
161 } // namespace gpu | 134 } // namespace gpu |
162 | |
OLD | NEW |