OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/texture_uploader.h" | 5 #include "cc/texture_uploader.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 | 135 |
136 // Use the median as our estimate. | 136 // Use the median as our estimate. |
137 std::multiset<double>::iterator median = m_texturesPerSecondHistory.begin(); | 137 std::multiset<double>::iterator median = m_texturesPerSecondHistory.begin(); |
138 std::advance(median, m_texturesPerSecondHistory.size() / 2); | 138 std::advance(median, m_texturesPerSecondHistory.size() / 2); |
139 TRACE_COUNTER_ID1("cc", "EstimatedTexturesPerSecond", m_context, *median); | 139 TRACE_COUNTER_ID1("cc", "EstimatedTexturesPerSecond", m_context, *median); |
140 return *median; | 140 return *median; |
141 } | 141 } |
142 | 142 |
143 void TextureUploader::beginQuery() | 143 void TextureUploader::beginQuery() |
144 { | 144 { |
145 if (m_availableQueries.isEmpty()) | 145 if (m_availableQueries.empty()) |
146 m_availableQueries.append(Query::create(m_context)); | 146 m_availableQueries.push_back(Query::create(m_context)); |
147 | 147 |
148 m_availableQueries.first()->begin(); | 148 m_availableQueries.front()->begin(); |
149 } | 149 } |
150 | 150 |
151 void TextureUploader::endQuery() | 151 void TextureUploader::endQuery() |
152 { | 152 { |
153 m_availableQueries.first()->end(); | 153 m_availableQueries.front()->end(); |
154 m_pendingQueries.append(m_availableQueries.takeFirst()); | 154 m_pendingQueries.push_back(m_availableQueries.take_front()); |
155 m_numBlockingTextureUploads++; | 155 m_numBlockingTextureUploads++; |
156 } | 156 } |
157 | 157 |
158 void TextureUploader::upload(const uint8* image, | 158 void TextureUploader::upload(const uint8* image, |
159 const gfx::Rect& image_rect, | 159 const gfx::Rect& image_rect, |
160 const gfx::Rect& source_rect, | 160 const gfx::Rect& source_rect, |
161 const gfx::Vector2d& dest_offset, | 161 const gfx::Vector2d& dest_offset, |
162 GLenum format, | 162 GLenum format, |
163 const gfx::Size& size) | 163 const gfx::Size& size) |
164 { | 164 { |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 &image[bytes_per_pixel * (offset.x() + | 335 &image[bytes_per_pixel * (offset.x() + |
336 (offset.y() + row) * image_rect.width())], | 336 (offset.y() + row) * image_rect.width())], |
337 source_rect.width() * bytes_per_pixel); | 337 source_rect.width() * bytes_per_pixel); |
338 } | 338 } |
339 | 339 |
340 m_context->unmapTexSubImage2DCHROMIUM(pixel_dest); | 340 m_context->unmapTexSubImage2DCHROMIUM(pixel_dest); |
341 } | 341 } |
342 | 342 |
343 void TextureUploader::processQueries() | 343 void TextureUploader::processQueries() |
344 { | 344 { |
345 while (!m_pendingQueries.isEmpty()) { | 345 while (!m_pendingQueries.empty()) { |
346 if (m_pendingQueries.first()->isPending()) | 346 if (m_pendingQueries.front()->isPending()) |
347 break; | 347 break; |
348 | 348 |
349 unsigned usElapsed = m_pendingQueries.first()->value(); | 349 unsigned usElapsed = m_pendingQueries.front()->value(); |
350 HISTOGRAM_CUSTOM_COUNTS("Renderer4.TextureGpuUploadTimeUS", usElapsed, 0
, 100000, 50); | 350 HISTOGRAM_CUSTOM_COUNTS("Renderer4.TextureGpuUploadTimeUS", usElapsed, 0
, 100000, 50); |
351 | 351 |
352 // Clamp the queries to saner values in case the queries fail. | 352 // Clamp the queries to saner values in case the queries fail. |
353 usElapsed = std::max(1u, usElapsed); | 353 usElapsed = std::max(1u, usElapsed); |
354 usElapsed = std::min(15000u, usElapsed); | 354 usElapsed = std::min(15000u, usElapsed); |
355 | 355 |
356 if (!m_pendingQueries.first()->isNonBlocking()) | 356 if (!m_pendingQueries.front()->isNonBlocking()) |
357 m_numBlockingTextureUploads--; | 357 m_numBlockingTextureUploads--; |
358 | 358 |
359 // Remove the min and max value from our history and insert the new one. | 359 // Remove the min and max value from our history and insert the new one. |
360 double texturesPerSecond = 1.0 / (usElapsed * 1e-6); | 360 double texturesPerSecond = 1.0 / (usElapsed * 1e-6); |
361 if (m_texturesPerSecondHistory.size() >= uploadHistorySizeMax) { | 361 if (m_texturesPerSecondHistory.size() >= uploadHistorySizeMax) { |
362 m_texturesPerSecondHistory.erase(m_texturesPerSecondHistory.begin())
; | 362 m_texturesPerSecondHistory.erase(m_texturesPerSecondHistory.begin())
; |
363 m_texturesPerSecondHistory.erase(--m_texturesPerSecondHistory.end())
; | 363 m_texturesPerSecondHistory.erase(--m_texturesPerSecondHistory.end())
; |
364 } | 364 } |
365 m_texturesPerSecondHistory.insert(texturesPerSecond); | 365 m_texturesPerSecondHistory.insert(texturesPerSecond); |
366 | 366 |
367 m_availableQueries.append(m_pendingQueries.takeFirst()); | 367 m_availableQueries.push_back(m_pendingQueries.take_front()); |
368 } | 368 } |
369 } | 369 } |
370 | 370 |
371 } // namespace cc | 371 } // namespace cc |
OLD | NEW |