Commit 61bb69af authored by kylechar's avatar kylechar Committed by Commit Bot

Add debug BeginFrame tracking

Add some temporary member variables to BeginFrameTracker that stores the
total sent/received and the last 10 sent/received BeginFrameIds. Despite
adding logic to stop sending OnBeginFrame() to unresponsive clients it
didn't help with the large number of unread messages in mojo message
queue. This information will do a better job of verifying if client is
in fact reading (and responding to) the OnBeginFrame() messages.

The |begin_frame_tracker_| is included in a few minidumps I looked at
it, so this information should be available in crash reports. Otherwise
we'll have to copy the information into the stack in OnBeginFrame().

Bug: 1011441
Change-Id: I44112d933fb4470fb037e7bfd2d9dc05dd826a94
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1994093Reviewed-by: default avatarSaman Sami <samans@chromium.org>
Commit-Queue: kylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#730310}
parent 86ea7f5f
...@@ -6,12 +6,22 @@ ...@@ -6,12 +6,22 @@
namespace viz { namespace viz {
BeginFrameTracker::BeginFrameTracker() = default;
BeginFrameTracker::~BeginFrameTracker() = default;
void BeginFrameTracker::SentBeginFrame(const BeginFrameArgs& args) { void BeginFrameTracker::SentBeginFrame(const BeginFrameArgs& args) {
++total_begin_frames_sent_;
recent_begin_frames_sent_.SaveToBuffer(args.frame_id);
++outstanding_begin_frames_; ++outstanding_begin_frames_;
last_frame_id_ = args.frame_id; last_frame_id_ = args.frame_id;
} }
void BeginFrameTracker::ReceivedAck(const BeginFrameAck& ack) { void BeginFrameTracker::ReceivedAck(const BeginFrameAck& ack) {
++total_acks_received_;
recent_acks_received_.SaveToBuffer(ack.frame_id);
if (MatchesLastSent(ack)) { if (MatchesLastSent(ack)) {
// If the BeginFrameAck matches the last sent BeginFrameArgs then we know // If the BeginFrameAck matches the last sent BeginFrameArgs then we know
// the client has read every message from the pipe. While the client // the client has read every message from the pipe. While the client
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_ #ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_
#define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_ #define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_BEGIN_FRAME_TRACKER_H_
#include "base/containers/ring_buffer.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h" #include "components/viz/common/frame_sinks/begin_frame_args.h"
#include "components/viz/service/viz_service_export.h" #include "components/viz/service/viz_service_export.h"
...@@ -23,6 +24,9 @@ class VIZ_SERVICE_EXPORT BeginFrameTracker { ...@@ -23,6 +24,9 @@ class VIZ_SERVICE_EXPORT BeginFrameTracker {
static constexpr int kLimitStop = 100; static constexpr int kLimitStop = 100;
static constexpr int kLimitThrottle = 10; static constexpr int kLimitThrottle = 10;
BeginFrameTracker();
~BeginFrameTracker();
// To be called every time OnBeginFrame() is sent. // To be called every time OnBeginFrame() is sent.
void SentBeginFrame(const BeginFrameArgs& args); void SentBeginFrame(const BeginFrameArgs& args);
...@@ -38,6 +42,15 @@ class VIZ_SERVICE_EXPORT BeginFrameTracker { ...@@ -38,6 +42,15 @@ class VIZ_SERVICE_EXPORT BeginFrameTracker {
int outstanding_begin_frames_ = 0; int outstanding_begin_frames_ = 0;
BeginFrameId last_frame_id_; BeginFrameId last_frame_id_;
// The following variables are keeping track of some information about sent
// and received BeginFrameIds. This information is just being tracked only so
// it's available in crash minidumps to help debug https://crbug.com/1011441.
// TODO(crbug.com/1011441): Remove this before it hits stable channel!
int total_begin_frames_sent_ = 0;
int total_acks_received_ = 0;
base::RingBuffer<BeginFrameId, 10> recent_begin_frames_sent_;
base::RingBuffer<BeginFrameId, 10> recent_acks_received_;
}; };
} // namespace viz } // namespace viz
......
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