Commit 87cea8f0 authored by Peng Huang's avatar Peng Huang Committed by Commit Bot

Fix trace event problems with webview

Bug: None
Change-Id: I3b6693b4c3e6c07806da8899a0f44b46450ff9ee
Reviewed-on: https://chromium-review.googlesource.com/c/1461178Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Peng Huang <penghuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#630565}
parent ca7a4a34
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "gpu/command_buffer/service/shared_context_state.h" #include "gpu/command_buffer/service/shared_context_state.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
#include "ui/gfx/presentation_feedback.h"
#include "ui/gfx/transform.h" #include "ui/gfx/transform.h"
#include "ui/gl/gl_context.h" #include "ui/gl/gl_context.h"
#include "ui/gl/gl_share_group.h" #include "ui/gl/gl_share_group.h"
...@@ -228,6 +229,8 @@ void SurfacesInstance::DrawAndSwap(const gfx::Size& viewport, ...@@ -228,6 +229,8 @@ void SurfacesInstance::DrawAndSwap(const gfx::Size& viewport,
display_->Resize(viewport); display_->Resize(viewport);
display_->DrawAndSwap(); display_->DrawAndSwap();
display_->DidReceiveSwapBuffersAck(); display_->DidReceiveSwapBuffersAck();
display_->DidReceivePresentationFeedback(gfx::PresentationFeedback(
base::TimeTicks::Now(), base::TimeDelta(), 0 /* flags */));
} }
void SurfacesInstance::AddChildId(const viz::SurfaceId& child_id) { void SurfacesInstance::AddChildId(const viz::SurfaceId& child_id) {
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <vector> #include <vector>
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/callback_helpers.h" #include "base/callback_helpers.h"
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
...@@ -679,25 +680,30 @@ void SkiaOutputSurfaceImpl::InitializeOnGpuThread(base::WaitableEvent* event) { ...@@ -679,25 +680,30 @@ void SkiaOutputSurfaceImpl::InitializeOnGpuThread(base::WaitableEvent* event) {
base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(event))); base::BindOnce(&base::WaitableEvent::Signal, base::Unretained(event)));
} }
auto did_swap_buffer_complete_callback = base::BindRepeating(
&SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
did_swap_buffer_complete_callback = CreateSafeCallback(
client_thread_task_runner_, did_swap_buffer_complete_callback);
auto buffer_presented_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
buffer_presented_callback =
CreateSafeCallback(client_thread_task_runner_, buffer_presented_callback);
auto context_lost_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
context_lost_callback =
CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
if (task_executor_) { if (task_executor_) {
// When |task_executor_| is not nullptr, DidSwapBuffersComplete(),
// BufferPresented(), ContextList() are not expected to be called by this
// class. The SurfacesInstance will do it.
impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>( impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
task_executor_.get(), gl_surface_, std::move(shared_context_state_), task_executor_.get(), gl_surface_, std::move(shared_context_state_),
sequence_->GetSequenceId(), did_swap_buffer_complete_callback, sequence_->GetSequenceId(),
buffer_presented_callback, context_lost_callback); base::DoNothing::Repeatedly<gpu::SwapBuffersCompleteParams,
const gfx::Size&>(),
base::DoNothing::Repeatedly<const gfx::PresentationFeedback&>(),
base::DoNothing::Repeatedly<>());
} else { } else {
auto did_swap_buffer_complete_callback = base::BindRepeating(
&SkiaOutputSurfaceImpl::DidSwapBuffersComplete, weak_ptr_);
did_swap_buffer_complete_callback = CreateSafeCallback(
client_thread_task_runner_, did_swap_buffer_complete_callback);
auto buffer_presented_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::BufferPresented, weak_ptr_);
buffer_presented_callback = CreateSafeCallback(client_thread_task_runner_,
buffer_presented_callback);
auto context_lost_callback =
base::BindRepeating(&SkiaOutputSurfaceImpl::ContextLost, weak_ptr_);
context_lost_callback =
CreateSafeCallback(client_thread_task_runner_, context_lost_callback);
impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>( impl_on_gpu_ = std::make_unique<SkiaOutputSurfaceImplOnGpu>(
gpu_service_, surface_handle_, did_swap_buffer_complete_callback, gpu_service_, surface_handle_, did_swap_buffer_complete_callback,
buffer_presented_callback, context_lost_callback); buffer_presented_callback, context_lost_callback);
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/atomic_sequence_num.h" #include "base/atomic_sequence_num.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/callback_helpers.h" #include "base/callback_helpers.h"
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "components/viz/common/frame_sinks/begin_frame_source.h" #include "components/viz/common/frame_sinks/begin_frame_source.h"
...@@ -171,7 +172,7 @@ unsigned SkiaOutputSurfaceImplNonDDL::UpdateGpuFence() { ...@@ -171,7 +172,7 @@ unsigned SkiaOutputSurfaceImplNonDDL::UpdateGpuFence() {
void SkiaOutputSurfaceImplNonDDL::SetNeedsSwapSizeNotifications( void SkiaOutputSurfaceImplNonDDL::SetNeedsSwapSizeNotifications(
bool needs_swap_size_notifications) { bool needs_swap_size_notifications) {
needs_swap_size_notifications_ = needs_swap_size_notifications; NOTIMPLEMENTED();
} }
SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintCurrentFrame() { SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintCurrentFrame() {
...@@ -296,13 +297,8 @@ gpu::SyncToken SkiaOutputSurfaceImplNonDDL::ReleasePromiseSkImages( ...@@ -296,13 +297,8 @@ gpu::SyncToken SkiaOutputSurfaceImplNonDDL::ReleasePromiseSkImages(
void SkiaOutputSurfaceImplNonDDL::SkiaSwapBuffers(OutputSurfaceFrame frame) { void SkiaOutputSurfaceImplNonDDL::SkiaSwapBuffers(OutputSurfaceFrame frame) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
gpu::SwapBuffersCompleteParams params; gl_surface_->SwapBuffers(
params.swap_response.swap_start = base::TimeTicks::Now(); base::DoNothing::Once<const gfx::PresentationFeedback&>());
params.swap_response.result = gl_surface_->SwapBuffers(base::BindOnce(
&SkiaOutputSurfaceImplNonDDL::BufferPresented, base::Unretained(this)));
params.swap_response.swap_end = base::TimeTicks::Now();
DidSwapBuffersComplete(params, gfx::Size());
} }
SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintRenderPass( SkCanvas* SkiaOutputSurfaceImplNonDDL::BeginPaintRenderPass(
...@@ -431,27 +427,6 @@ bool SkiaOutputSurfaceImplNonDDL::GetGrBackendTexture( ...@@ -431,27 +427,6 @@ bool SkiaOutputSurfaceImplNonDDL::GetGrBackendTexture(
metadata.resource_format, backend_texture); metadata.resource_format, backend_texture);
} }
void SkiaOutputSurfaceImplNonDDL::DidSwapBuffersComplete(
const gpu::SwapBuffersCompleteParams& params,
const gfx::Size& pixel_size) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(client_);
DCHECK(params.texture_in_use_responses.empty());
DCHECK(params.ca_layer_params.is_empty);
client_->DidReceiveSwapBuffersAck();
if (needs_swap_size_notifications_)
client_->DidSwapWithSize(pixel_size);
}
void SkiaOutputSurfaceImplNonDDL::BufferPresented(
const gfx::PresentationFeedback& feedback) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(client_);
client_->DidReceivePresentationFeedback(feedback);
}
void SkiaOutputSurfaceImplNonDDL::ContextLost() { void SkiaOutputSurfaceImplNonDDL::ContextLost() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
for (auto& observer : observers_) for (auto& observer : observers_)
......
...@@ -21,13 +21,8 @@ namespace gl { ...@@ -21,13 +21,8 @@ namespace gl {
class GLSurface; class GLSurface;
} }
namespace gfx {
struct PresentationFeedback;
}
namespace gpu { namespace gpu {
class MailboxManager; class MailboxManager;
struct SwapBuffersCompleteParams;
class SyncPointClientState; class SyncPointClientState;
class SyncPointManager; class SyncPointManager;
class SyncPointOrderData; class SyncPointOrderData;
...@@ -112,9 +107,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImplNonDDL ...@@ -112,9 +107,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImplNonDDL
bool GetGrBackendTexture(const ResourceMetadata& metadata, bool GetGrBackendTexture(const ResourceMetadata& metadata,
GrBackendTexture* backend_texture); GrBackendTexture* backend_texture);
void DidSwapBuffersComplete(const gpu::SwapBuffersCompleteParams& params,
const gfx::Size& pixel_size);
void BufferPresented(const gfx::PresentationFeedback& feedback);
void ContextLost(); void ContextLost();
uint64_t sync_fence_release_ = 0; uint64_t sync_fence_release_ = 0;
...@@ -139,9 +131,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImplNonDDL ...@@ -139,9 +131,6 @@ class VIZ_SERVICE_EXPORT SkiaOutputSurfaceImplNonDDL
// The current render pass id set by BeginPaintRenderPass. // The current render pass id set by BeginPaintRenderPass.
RenderPassId current_render_pass_id_ = 0; RenderPassId current_render_pass_id_ = 0;
// Whether to send OutputSurfaceClient::DidSwapWithSize notifications.
bool needs_swap_size_notifications_ = false;
// Observers for context lost. // Observers for context lost.
base::ObserverList<ContextLostObserver>::Unchecked observers_; base::ObserverList<ContextLostObserver>::Unchecked observers_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment