Files
react-native/ReactCommon/react/renderer/timeline/TimelineHandler.h
T
Valentin Shergin 336876509c Introducing Timeline: A time-travel debugging tool (cross-platform part)
Summary:
This is a core part of the Timeline feature (aka Time Travel Debugger). With these new primitives, any external library can initiate "saving" all the previous interface changes (commits) and unwind to any previous one (in order to introspect and validate visual side-effects).

The next diff in the stack will implement UI for this feature integrated into Debug menu on iOS.

Changelog: [Internal] Fabric-specific internal change.

Reviewed By: sammy-SC

Differential Revision: D25926660

fbshipit-source-id: 2e5f6892351d3053db8f64c1cf6ff445b0867ad7
2021-03-24 11:30:24 -07:00

81 lines
1.9 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <react/renderer/core/LayoutPrimitives.h>
#include <react/renderer/timeline/TimelineFrame.h>
#include <react/renderer/uimanager/UIManagerCommitHook.h>
namespace facebook {
namespace react {
class Timeline;
class TimelineHandler final {
public:
~TimelineHandler() noexcept;
/*
* Movable, not copyable.
*/
TimelineHandler(TimelineHandler &&timelineHandler) noexcept;
TimelineHandler(TimelineHandler const &timelineHandler) = delete;
TimelineHandler &operator=(TimelineHandler &&other) noexcept;
TimelineHandler &operator=(TimelineHandler const &other) = delete;
/*
* Stops (or resumes) mounting of new commits.
* A surface has to be paused to allow rewinding the UI to some past commit.
*/
void pause() const noexcept;
void resume() const noexcept;
bool isPaused() const noexcept;
/*
* Provides access to recorded frames.
*/
TimelineFrame::List getFrames() const noexcept;
TimelineFrame getCurrentFrame() const noexcept;
/*
* Rewinds the UI to a given frame.
*/
void rewind(TimelineFrame const &frame) const noexcept;
/*
* Rewinds the UI for a given number of frames back or forward.
*/
void seek(int delta) const noexcept;
private:
friend class TimelineController;
/*
* Can only be constructed by `TimelineController`.
*/
TimelineHandler(Timeline const &timeline) noexcept;
/*
* Must be called before deallocation to make it not crash.
* Must be only called by `TimelineController`.
*/
void release() noexcept;
/*
* Returns a `SurfaceId` of the assigned Surface.
*/
SurfaceId getSurfaceId() const noexcept;
void ensureNotEmpty() const noexcept;
Timeline const *timeline_;
};
} // namespace react
} // namespace facebook