| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index 03ce04134dc62c31df4633c1137cbb290af7591c..ec22bd69ea1f37070179fc2c89836957a1fef534 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -19,7 +19,6 @@
|
| #include "base/callback.h"
|
| #include "base/callback_helpers.h"
|
| #include "base/logging.h"
|
| -#include "base/memory/linked_ptr.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/numerics/safe_math.h"
|
| #include "base/strings/string_number_conversions.h"
|
| @@ -521,6 +520,8 @@ class BackFramebuffer {
|
|
|
| struct FenceCallback {
|
| FenceCallback() : fence(gl::GLFence::Create()) { DCHECK(fence); }
|
| + FenceCallback(FenceCallback&&) = default;
|
| + FenceCallback& operator=(FenceCallback&&) = default;
|
| std::vector<base::Closure> callbacks;
|
| std::unique_ptr<gl::GLFence> fence;
|
| };
|
| @@ -2245,7 +2246,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
|
| bool gpu_trace_commands_;
|
| bool gpu_debug_commands_;
|
|
|
| - std::queue<linked_ptr<FenceCallback> > pending_readpixel_fences_;
|
| + std::queue<FenceCallback> pending_readpixel_fences_;
|
|
|
| // After a second fence is inserted, both the GpuChannelMessageQueue and
|
| // CommandExecutor are descheduled. Once the first fence has completed, both
|
| @@ -10520,8 +10521,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32_t immediate_data_size,
|
| // PIXEL_PACK_BUFFER is bound, and all these settings haven't been
|
| // sent to GL.
|
| glReadPixels(x, y, width, height, format, type, 0);
|
| - pending_readpixel_fences_.push(linked_ptr<FenceCallback>(
|
| - new FenceCallback()));
|
| + pending_readpixel_fences_.push(FenceCallback());
|
| WaitForReadPixels(base::Bind(&GLES2DecoderImpl::FinishReadPixels,
|
| base::AsWeakPtr(this), c, buffer));
|
| glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
|
| @@ -14371,7 +14371,7 @@ void GLES2DecoderImpl::ProcessPendingQueries(bool did_finish) {
|
| // this function will call the callback immediately.
|
| void GLES2DecoderImpl::WaitForReadPixels(base::Closure callback) {
|
| if (features().use_async_readpixels && !pending_readpixel_fences_.empty()) {
|
| - pending_readpixel_fences_.back()->callbacks.push_back(callback);
|
| + pending_readpixel_fences_.back().callbacks.push_back(callback);
|
| } else {
|
| callback.Run();
|
| }
|
| @@ -14383,9 +14383,9 @@ void GLES2DecoderImpl::ProcessPendingReadPixels(bool did_finish) {
|
| // that's not guaranteed by all GLFence implementations.
|
| while (!pending_readpixel_fences_.empty() &&
|
| (did_finish ||
|
| - pending_readpixel_fences_.front()->fence->HasCompleted())) {
|
| + pending_readpixel_fences_.front().fence->HasCompleted())) {
|
| std::vector<base::Closure> callbacks =
|
| - pending_readpixel_fences_.front()->callbacks;
|
| + std::move(pending_readpixel_fences_.front().callbacks);
|
| pending_readpixel_fences_.pop();
|
| for (size_t i = 0; i < callbacks.size(); i++) {
|
| callbacks[i].Run();
|
|
|