Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4414)

Unified Diff: cc/scheduler/scheduler_state_machine.h

Issue 1535833002: Delete CC. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-5
Patch Set: rebase Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/scheduler/scheduler_state_machine.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/scheduler_state_machine.h
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
deleted file mode 100644
index c5121d964727fa0226b6986f5462311eca2844eb..0000000000000000000000000000000000000000
--- a/cc/scheduler/scheduler_state_machine.h
+++ /dev/null
@@ -1,342 +0,0 @@
-// Copyright 2011 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.
-
-#ifndef CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
-#define CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/memory/scoped_ptr.h"
-#include "cc/output/begin_frame_args.h"
-#include "cc/scheduler/commit_earlyout_reason.h"
-#include "cc/scheduler/draw_result.h"
-#include "cc/scheduler/scheduler_settings.h"
-
-namespace base {
-namespace trace_event {
-class ConvertableToTraceFormat;
-class TracedValue;
-}
-class Value;
-}
-
-namespace cc {
-
-// The SchedulerStateMachine decides how to coordinate main thread activites
-// like painting/running javascript with rendering and input activities on the
-// impl thread.
-//
-// The state machine tracks internal state but is also influenced by external
-// state. Internal state includes things like whether a frame has been
-// requested, while external state includes things like the current time being
-// near to the vblank time.
-//
-// The scheduler seperates "what to do next" from the updating of its internal
-// state to make testing cleaner.
-class SchedulerStateMachine {
- public:
- // settings must be valid for the lifetime of this class.
- explicit SchedulerStateMachine(const SchedulerSettings& settings);
-
- enum OutputSurfaceState {
- OUTPUT_SURFACE_ACTIVE,
- OUTPUT_SURFACE_LOST,
- OUTPUT_SURFACE_CREATING,
- OUTPUT_SURFACE_WAITING_FOR_FIRST_COMMIT,
- OUTPUT_SURFACE_WAITING_FOR_FIRST_ACTIVATION,
- };
- static const char* OutputSurfaceStateToString(OutputSurfaceState state);
-
- // Note: BeginImplFrameState will always cycle through all the states in
- // order. Whether or not it actually waits or draws, it will at least try to
- // wait in BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME and try to draw in
- // BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE
- enum BeginImplFrameState {
- BEGIN_IMPL_FRAME_STATE_IDLE,
- BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING,
- BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME,
- BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE,
- };
- static const char* BeginImplFrameStateToString(BeginImplFrameState state);
-
- enum BeginImplFrameDeadlineMode {
- BEGIN_IMPL_FRAME_DEADLINE_MODE_IMMEDIATE,
- BEGIN_IMPL_FRAME_DEADLINE_MODE_REGULAR,
- BEGIN_IMPL_FRAME_DEADLINE_MODE_LATE,
- };
- static const char* BeginImplFrameDeadlineModeToString(
- BeginImplFrameDeadlineMode mode);
-
- enum CommitState {
- COMMIT_STATE_IDLE,
- COMMIT_STATE_BEGIN_MAIN_FRAME_SENT,
- COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED,
- COMMIT_STATE_READY_TO_COMMIT,
- COMMIT_STATE_WAITING_FOR_ACTIVATION,
- COMMIT_STATE_WAITING_FOR_DRAW,
- };
- static const char* CommitStateToString(CommitState state);
-
- enum ForcedRedrawOnTimeoutState {
- FORCED_REDRAW_STATE_IDLE,
- FORCED_REDRAW_STATE_WAITING_FOR_COMMIT,
- FORCED_REDRAW_STATE_WAITING_FOR_ACTIVATION,
- FORCED_REDRAW_STATE_WAITING_FOR_DRAW,
- };
- static const char* ForcedRedrawOnTimeoutStateToString(
- ForcedRedrawOnTimeoutState state);
-
- bool CommitPending() const {
- return commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
- commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED ||
- commit_state_ == COMMIT_STATE_READY_TO_COMMIT;
- }
- CommitState commit_state() const { return commit_state_; }
-
- bool RedrawPending() const { return needs_redraw_; }
- bool PrepareTilesPending() const { return needs_prepare_tiles_; }
-
- enum Action {
- ACTION_NONE,
- ACTION_ANIMATE,
- ACTION_SEND_BEGIN_MAIN_FRAME,
- ACTION_COMMIT,
- ACTION_ACTIVATE_SYNC_TREE,
- ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
- ACTION_DRAW_AND_SWAP_FORCED,
- ACTION_DRAW_AND_SWAP_ABORT,
- ACTION_BEGIN_OUTPUT_SURFACE_CREATION,
- ACTION_PREPARE_TILES,
- };
- static const char* ActionToString(Action action);
-
- scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsValue() const;
- void AsValueInto(base::trace_event::TracedValue* dict) const;
-
- Action NextAction() const;
- void UpdateState(Action action);
-
- // Indicates whether the impl thread needs a BeginImplFrame callback in order
- // to make progress.
- bool BeginFrameNeeded() const;
-
- // Indicates that we need to independently poll for new state and actions
- // because we can't expect a BeginImplFrame. This is mostly used to avoid
- // drawing repeat frames with the synchronous compositor without dropping
- // necessary actions on the floor.
- bool ShouldPollForAnticipatedDrawTriggers() const;
-
- // Indicates that the system has entered and left a BeginImplFrame callback.
- // The scheduler will not draw more than once in a given BeginImplFrame
- // callback nor send more than one BeginMainFrame message.
- void OnBeginImplFrame();
- void OnBeginImplFrameDeadlinePending();
- void OnBeginImplFrameDeadline();
- void OnBeginImplFrameIdle();
- BeginImplFrameState begin_impl_frame_state() const {
- return begin_impl_frame_state_;
- }
- BeginImplFrameDeadlineMode CurrentBeginImplFrameDeadlineMode() const;
-
- // If the main thread didn't manage to produce a new frame in time for the
- // impl thread to draw, it is in a high latency mode.
- bool MainThreadIsInHighLatencyMode() const;
-
- // PollForAnticipatedDrawTriggers is used by the synchronous compositor to
- // avoid requesting BeginImplFrames when we won't actually draw but still
- // need to advance our state at vsync intervals.
- void DidEnterPollForAnticipatedDrawTriggers();
- void DidLeavePollForAnticipatedDrawTriggers();
- bool inside_poll_for_anticipated_draw_triggers() const {
- return inside_poll_for_anticipated_draw_triggers_;
- }
-
- // Indicates whether the LayerTreeHostImpl is visible.
- void SetVisible(bool visible);
- bool visible() const { return visible_; }
-
- // Indicates that a redraw is required, either due to the impl tree changing
- // or the screen being damaged and simply needing redisplay.
- void SetNeedsRedraw();
- bool needs_redraw() const { return needs_redraw_; }
-
- void SetNeedsAnimate();
- bool needs_animate() const { return needs_animate_; }
-
- // Indicates that prepare-tiles is required. This guarantees another
- // PrepareTiles will occur shortly (even if no redraw is required).
- void SetNeedsPrepareTiles();
-
- // Sets how many swaps can be pending to the OutputSurface.
- void SetMaxSwapsPending(int max);
-
- // If the scheduler attempted to draw and swap, this provides feedback
- // regarding whether or not the swap actually occured. We might skip the
- // swap when there is not damage, for example.
- void DidSwapBuffers();
-
- // Indicates whether a redraw is required because we are currently rendering
- // with a low resolution or checkerboarded tile.
- void SetSwapUsedIncompleteTile(bool used_incomplete_tile);
-
- // Notification from the OutputSurface that a swap has been consumed.
- void DidSwapBuffersComplete();
-
- // Indicates whether to prioritize impl thread latency (i.e., animation
- // smoothness) over new content activation.
- void SetImplLatencyTakesPriority(bool impl_latency_takes_priority);
- bool impl_latency_takes_priority() const {
- return impl_latency_takes_priority_;
- }
-
- // Indicates whether ACTION_DRAW_AND_SWAP_IF_POSSIBLE drew to the screen.
- void DidDrawIfPossibleCompleted(DrawResult result);
-
- // Indicates that a new commit flow needs to be performed, either to pull
- // updates from the main thread to the impl, or to push deltas from the impl
- // thread to main.
- void SetNeedsCommit();
-
- // Call this only in response to receiving an ACTION_SEND_BEGIN_MAIN_FRAME
- // from NextAction.
- // Indicates that all painting is complete.
- void NotifyReadyToCommit();
-
- // Call this only in response to receiving an ACTION_SEND_BEGIN_MAIN_FRAME
- // from NextAction if the client rejects the BeginMainFrame message.
- void BeginMainFrameAborted(CommitEarlyOutReason reason);
-
- // Set that we can create the first OutputSurface and start the scheduler.
- void SetCanStart() { can_start_ = true; }
- // Allow access of the can_start_ state in tests.
- bool CanStartForTesting() const { return can_start_; }
-
- void SetSkipNextBeginMainFrameToReduceLatency();
-
- // Indicates whether drawing would, at this time, make sense.
- // CanDraw can be used to suppress flashes or checkerboarding
- // when such behavior would be undesirable.
- void SetCanDraw(bool can);
-
- // Indicates that scheduled BeginMainFrame is started.
- void NotifyBeginMainFrameStarted();
-
- // Indicates that the pending tree is ready for activation.
- void NotifyReadyToActivate();
-
- bool has_pending_tree() const { return has_pending_tree_; }
- bool active_tree_needs_first_draw() const {
- return active_tree_needs_first_draw_;
- }
-
- void DidPrepareTiles();
- void DidLoseOutputSurface();
- void DidCreateAndInitializeOutputSurface();
- bool HasInitializedOutputSurface() const;
-
- // True if we need to abort draws to make forward progress.
- bool PendingDrawsShouldBeAborted() const;
-
- bool SupportsProactiveBeginFrame() const;
-
- void SetContinuousPainting(bool continuous_painting) {
- continuous_painting_ = continuous_painting;
- }
-
- bool CouldSendBeginMainFrame() const;
-
- void SetDeferCommits(bool defer_commits);
-
- // TODO(zmo): This is temporary for debugging crbug.com/393331.
- // We should remove it afterwards.
- std::string GetStatesForDebugging() const;
-
- void SetChildrenNeedBeginFrames(bool children_need_begin_frames);
- bool children_need_begin_frames() const {
- return children_need_begin_frames_;
- }
-
- protected:
- bool BeginFrameNeededToAnimateOrDraw() const;
- bool BeginFrameNeededForChildren() const;
- bool ProactiveBeginFrameWanted() const;
-
- bool ShouldTriggerBeginImplFrameDeadlineImmediately() const;
-
- // True if we need to force activations to make forward progress.
- bool PendingActivationsShouldBeForced() const;
-
- bool ShouldAnimate() const;
- bool ShouldBeginOutputSurfaceCreation() const;
- bool ShouldDraw() const;
- bool ShouldActivatePendingTree() const;
- bool ShouldSendBeginMainFrame() const;
- bool ShouldCommit() const;
- bool ShouldPrepareTiles() const;
-
- void AdvanceCurrentFrameNumber();
-
- void UpdateStateOnCommit(bool commit_had_no_updates);
- void UpdateStateOnActivation();
- void UpdateStateOnDraw(bool did_request_swap);
- void UpdateStateOnPrepareTiles();
-
- const SchedulerSettings settings_;
-
- OutputSurfaceState output_surface_state_;
- BeginImplFrameState begin_impl_frame_state_;
- CommitState commit_state_;
- ForcedRedrawOnTimeoutState forced_redraw_state_;
-
- // These are used for tracing only.
- int commit_count_;
- int current_frame_number_;
- int last_frame_number_animate_performed_;
- int last_frame_number_swap_performed_;
- int last_frame_number_swap_requested_;
- int last_frame_number_begin_main_frame_sent_;
-
- // These are used to ensure that an action only happens once per frame,
- // deadline, etc.
- bool animate_funnel_;
- bool perform_swap_funnel_;
- bool request_swap_funnel_;
- bool send_begin_main_frame_funnel_;
- // prepare_tiles_funnel_ is "filled" each time PrepareTiles is called
- // and "drained" on each BeginImplFrame. If the funnel gets too full,
- // we start throttling ACTION_PREPARE_TILES such that we average one
- // PrepareTiles per BeginImplFrame.
- int prepare_tiles_funnel_;
-
- int consecutive_checkerboard_animations_;
- int max_pending_swaps_;
- int pending_swaps_;
- bool needs_redraw_;
- bool needs_animate_;
- bool needs_prepare_tiles_;
- bool needs_commit_;
- bool inside_poll_for_anticipated_draw_triggers_;
- bool visible_;
- bool can_start_;
- bool can_draw_;
- bool has_pending_tree_;
- bool pending_tree_is_ready_for_activation_;
- bool active_tree_needs_first_draw_;
- bool did_create_and_initialize_first_output_surface_;
- bool impl_latency_takes_priority_;
- bool skip_next_begin_main_frame_to_reduce_latency_;
- bool skip_begin_main_frame_to_reduce_latency_;
- bool continuous_painting_;
- bool children_need_begin_frames_;
- bool defer_commits_;
- bool last_commit_had_no_updates_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(SchedulerStateMachine);
-};
-
-} // namespace cc
-
-#endif // CC_SCHEDULER_SCHEDULER_STATE_MACHINE_H_
« no previous file with comments | « cc/scheduler/scheduler_settings.cc ('k') | cc/scheduler/scheduler_state_machine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698