diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-20 10:33:36 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-11-22 11:45:12 +0000 |
commit | be59a35641616a4cf23c4a13fa0632624b021c1b (patch) | |
tree | 9da183258bdf9cc413f7562079d25ace6955467f /chromium/components/viz/common/quads/copy_output_request.cc | |
parent | d702e4b6a64574e97fc7df8fe3238cde70242080 (diff) | |
download | qtwebengine-chromium-be59a35641616a4cf23c4a13fa0632624b021c1b.tar.gz |
BASELINE: Update Chromium to 62.0.3202.101
Change-Id: I2d5eca8117600df6d331f6166ab24d943d9814ac
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/components/viz/common/quads/copy_output_request.cc')
-rw-r--r-- | chromium/components/viz/common/quads/copy_output_request.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/chromium/components/viz/common/quads/copy_output_request.cc b/chromium/components/viz/common/quads/copy_output_request.cc new file mode 100644 index 00000000000..de505d68c32 --- /dev/null +++ b/chromium/components/viz/common/quads/copy_output_request.cc @@ -0,0 +1,68 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/viz/common/quads/copy_output_request.h" + +#include "base/bind.h" +#include "base/logging.h" +#include "base/trace_event/trace_event.h" +#include "components/viz/common/quads/copy_output_result.h" +#include "components/viz/common/quads/texture_mailbox.h" +#include "third_party/skia/include/core/SkBitmap.h" + +namespace viz { + +CopyOutputRequest::CopyOutputRequest() : force_bitmap_result_(false) {} + +CopyOutputRequest::CopyOutputRequest(bool force_bitmap_result, + CopyOutputRequestCallback result_callback) + : force_bitmap_result_(force_bitmap_result), + result_callback_(std::move(result_callback)) { + DCHECK(!result_callback_.is_null()); + TRACE_EVENT_ASYNC_BEGIN0("viz", "CopyOutputRequest", this); +} + +CopyOutputRequest::~CopyOutputRequest() { + if (!result_callback_.is_null()) + SendResult(CopyOutputResult::CreateEmptyResult()); +} + +void CopyOutputRequest::SendResult(std::unique_ptr<CopyOutputResult> result) { + TRACE_EVENT_ASYNC_END1("viz", "CopyOutputRequest", this, "success", + !result->IsEmpty()); + if (result_task_runner_) { + result_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(std::move(result_callback_), std::move(result))); + result_task_runner_ = nullptr; + } else { + std::move(result_callback_).Run(std::move(result)); + } +} + +void CopyOutputRequest::SendEmptyResult() { + SendResult(CopyOutputResult::CreateEmptyResult()); +} + +void CopyOutputRequest::SendBitmapResult(std::unique_ptr<SkBitmap> bitmap) { + SendResult(CopyOutputResult::CreateBitmapResult(std::move(bitmap))); +} + +void CopyOutputRequest::SendTextureResult( + const gfx::Size& size, + const TextureMailbox& texture_mailbox, + std::unique_ptr<SingleReleaseCallback> release_callback) { + DCHECK(texture_mailbox.IsTexture()); + SendResult(CopyOutputResult::CreateTextureResult( + size, texture_mailbox, std::move(release_callback))); +} + +void CopyOutputRequest::SetTextureMailbox( + const TextureMailbox& texture_mailbox) { + DCHECK(!force_bitmap_result_); + DCHECK(texture_mailbox.IsTexture()); + texture_mailbox_ = texture_mailbox; +} + +} // namespace viz |