Revert "Reland path volatility tracker (#23063)" (#23220) (#23239)
This reverts commit 205d2b8e188be518c313c9b537429b566d36fa35.
Co-authored-by: Dan Field <dnfield@google.com>
diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter
index 7c23ce8..e10d993 100755
--- a/ci/licenses_golden/licenses_flutter
+++ b/ci/licenses_golden/licenses_flutter
@@ -1008,7 +1008,6 @@
FILE: ../../../flutter/lib/ui/painting/path.h
FILE: ../../../flutter/lib/ui/painting/path_measure.cc
FILE: ../../../flutter/lib/ui/painting/path_measure.h
-FILE: ../../../flutter/lib/ui/painting/path_unittests.cc
FILE: ../../../flutter/lib/ui/painting/picture.cc
FILE: ../../../flutter/lib/ui/painting/picture.h
FILE: ../../../flutter/lib/ui/painting/picture_recorder.cc
@@ -1052,8 +1051,6 @@
FILE: ../../../flutter/lib/ui/ui_benchmarks.cc
FILE: ../../../flutter/lib/ui/ui_dart_state.cc
FILE: ../../../flutter/lib/ui/ui_dart_state.h
-FILE: ../../../flutter/lib/ui/volatile_path_tracker.cc
-FILE: ../../../flutter/lib/ui/volatile_path_tracker.h
FILE: ../../../flutter/lib/ui/window.dart
FILE: ../../../flutter/lib/ui/window/platform_configuration.cc
FILE: ../../../flutter/lib/ui/window/platform_configuration.h
diff --git a/fml/trace_event.h b/fml/trace_event.h
index 3928d68..ae80298 100644
--- a/fml/trace_event.h
+++ b/fml/trace_event.h
@@ -68,19 +68,6 @@
::fml::tracing::TraceCounter((category_group), (name), (counter_id), (arg1), \
__VA_ARGS__);
-// Avoid using the same `name` and `argX_name` for nested traces, which can
-// lead to double free errors. E.g. the following code should be avoided:
-//
-// ```cpp
-// {
-// TRACE_EVENT1("flutter", "Foo::Bar", "count", "initial_count_value");
-// ...
-// TRACE_EVENT_INSTANT1("flutter", "Foo::Bar",
-// "count", "updated_count_value");
-// }
-// ```
-//
-// Instead, either use different `name` or `arg1` parameter names.
#define FML_TRACE_EVENT(category_group, name, ...) \
::fml::tracing::TraceEvent((category_group), (name), __VA_ARGS__); \
__FML__AUTO_TRACE_END(name)
diff --git a/lib/ui/BUILD.gn b/lib/ui/BUILD.gn
index fa31f9f..6ce9238 100644
--- a/lib/ui/BUILD.gn
+++ b/lib/ui/BUILD.gn
@@ -91,8 +91,6 @@
"text/text_box.h",
"ui_dart_state.cc",
"ui_dart_state.h",
- "volatile_path_tracker.cc",
- "volatile_path_tracker.h",
"window/platform_configuration.cc",
"window/platform_configuration.h",
"window/platform_message.cc",
@@ -190,7 +188,6 @@
sources = [
"painting/image_dispose_unittests.cc",
"painting/image_encoding_unittests.cc",
- "painting/path_unittests.cc",
"painting/vertices_unittests.cc",
"window/platform_configuration_unittests.cc",
"window/pointer_data_packet_converter_unittests.cc",
diff --git a/lib/ui/fixtures/ui_test.dart b/lib/ui/fixtures/ui_test.dart
index 9e274e9..87effaa 100644
--- a/lib/ui/fixtures/ui_test.dart
+++ b/lib/ui/fixtures/ui_test.dart
@@ -35,19 +35,8 @@
);
_validateVertices(vertices);
}
-void _validateVertices(Vertices vertices) native 'ValidateVertices';
-@pragma('vm:entry-point')
-void createPath() {
- final Path path = Path()..lineTo(10, 10);
- _validatePath(path);
- // Arbitrarily hold a reference to the path to make sure it does not get
- // garbage collected.
- Future<void>.delayed(const Duration(days: 100)).then((_) {
- path.lineTo(100, 100);
- });
-}
-void _validatePath(Path path) native 'ValidatePath';
+void _validateVertices(Vertices vertices) native 'ValidateVertices';
@pragma('vm:entry-point')
void frameCallback(FrameInfo info) {
diff --git a/lib/ui/painting/path.cc b/lib/ui/painting/path.cc
index 6cc2b05..d0898a4 100644
--- a/lib/ui/painting/path.cc
+++ b/lib/ui/painting/path.cc
@@ -67,69 +67,43 @@
FOR_EACH_BINDING(DART_REGISTER_NATIVE)});
}
-CanvasPath::CanvasPath()
- : path_tracker_(UIDartState::Current()->GetVolatilePathTracker()),
- tracked_path_(std::make_shared<VolatilePathTracker::TrackedPath>()) {
- FML_DCHECK(path_tracker_);
- resetVolatility();
-}
+CanvasPath::CanvasPath() {}
-CanvasPath::~CanvasPath() = default;
-
-void CanvasPath::resetVolatility() {
- if (!tracked_path_->tracking_volatility) {
- mutable_path().setIsVolatile(true);
- tracked_path_->frame_count = 0;
- tracked_path_->tracking_volatility = true;
- path_tracker_->Insert(tracked_path_);
- }
-}
-
-void CanvasPath::ReleaseDartWrappableReference() const {
- FML_DCHECK(path_tracker_);
- path_tracker_->Erase(tracked_path_);
-}
+CanvasPath::~CanvasPath() {}
int CanvasPath::getFillType() {
- return static_cast<int>(path().getFillType());
+ return static_cast<int>(path_.getFillType());
}
void CanvasPath::setFillType(int fill_type) {
- mutable_path().setFillType(static_cast<SkPathFillType>(fill_type));
- resetVolatility();
+ path_.setFillType(static_cast<SkPathFillType>(fill_type));
}
void CanvasPath::moveTo(float x, float y) {
- mutable_path().moveTo(x, y);
- resetVolatility();
+ path_.moveTo(x, y);
}
void CanvasPath::relativeMoveTo(float x, float y) {
- mutable_path().rMoveTo(x, y);
- resetVolatility();
+ path_.rMoveTo(x, y);
}
void CanvasPath::lineTo(float x, float y) {
- mutable_path().lineTo(x, y);
- resetVolatility();
+ path_.lineTo(x, y);
}
void CanvasPath::relativeLineTo(float x, float y) {
- mutable_path().rLineTo(x, y);
- resetVolatility();
+ path_.rLineTo(x, y);
}
void CanvasPath::quadraticBezierTo(float x1, float y1, float x2, float y2) {
- mutable_path().quadTo(x1, y1, x2, y2);
- resetVolatility();
+ path_.quadTo(x1, y1, x2, y2);
}
void CanvasPath::relativeQuadraticBezierTo(float x1,
float y1,
float x2,
float y2) {
- mutable_path().rQuadTo(x1, y1, x2, y2);
- resetVolatility();
+ path_.rQuadTo(x1, y1, x2, y2);
}
void CanvasPath::cubicTo(float x1,
@@ -138,8 +112,7 @@
float y2,
float x3,
float y3) {
- mutable_path().cubicTo(x1, y1, x2, y2, x3, y3);
- resetVolatility();
+ path_.cubicTo(x1, y1, x2, y2, x3, y3);
}
void CanvasPath::relativeCubicTo(float x1,
@@ -148,13 +121,11 @@
float y2,
float x3,
float y3) {
- mutable_path().rCubicTo(x1, y1, x2, y2, x3, y3);
- resetVolatility();
+ path_.rCubicTo(x1, y1, x2, y2, x3, y3);
}
void CanvasPath::conicTo(float x1, float y1, float x2, float y2, float w) {
- mutable_path().conicTo(x1, y1, x2, y2, w);
- resetVolatility();
+ path_.conicTo(x1, y1, x2, y2, w);
}
void CanvasPath::relativeConicTo(float x1,
@@ -162,8 +133,7 @@
float x2,
float y2,
float w) {
- mutable_path().rConicTo(x1, y1, x2, y2, w);
- resetVolatility();
+ path_.rConicTo(x1, y1, x2, y2, w);
}
void CanvasPath::arcTo(float left,
@@ -173,10 +143,9 @@
float startAngle,
float sweepAngle,
bool forceMoveTo) {
- mutable_path().arcTo(SkRect::MakeLTRB(left, top, right, bottom),
- startAngle * 180.0 / M_PI, sweepAngle * 180.0 / M_PI,
- forceMoveTo);
- resetVolatility();
+ path_.arcTo(SkRect::MakeLTRB(left, top, right, bottom),
+ startAngle * 180.0 / M_PI, sweepAngle * 180.0 / M_PI,
+ forceMoveTo);
}
void CanvasPath::arcToPoint(float arcEndX,
@@ -191,9 +160,8 @@
const auto direction =
isClockwiseDirection ? SkPathDirection::kCW : SkPathDirection::kCCW;
- mutable_path().arcTo(radiusX, radiusY, xAxisRotation, arcSize, direction,
- arcEndX, arcEndY);
- resetVolatility();
+ path_.arcTo(radiusX, radiusY, xAxisRotation, arcSize, direction, arcEndX,
+ arcEndY);
}
void CanvasPath::relativeArcToPoint(float arcEndDeltaX,
@@ -207,19 +175,16 @@
: SkPath::ArcSize::kSmall_ArcSize;
const auto direction =
isClockwiseDirection ? SkPathDirection::kCW : SkPathDirection::kCCW;
- mutable_path().rArcTo(radiusX, radiusY, xAxisRotation, arcSize, direction,
- arcEndDeltaX, arcEndDeltaY);
- resetVolatility();
+ path_.rArcTo(radiusX, radiusY, xAxisRotation, arcSize, direction,
+ arcEndDeltaX, arcEndDeltaY);
}
void CanvasPath::addRect(float left, float top, float right, float bottom) {
- mutable_path().addRect(SkRect::MakeLTRB(left, top, right, bottom));
- resetVolatility();
+ path_.addRect(SkRect::MakeLTRB(left, top, right, bottom));
}
void CanvasPath::addOval(float left, float top, float right, float bottom) {
- mutable_path().addOval(SkRect::MakeLTRB(left, top, right, bottom));
- resetVolatility();
+ path_.addOval(SkRect::MakeLTRB(left, top, right, bottom));
}
void CanvasPath::addArc(float left,
@@ -228,20 +193,17 @@
float bottom,
float startAngle,
float sweepAngle) {
- mutable_path().addArc(SkRect::MakeLTRB(left, top, right, bottom),
- startAngle * 180.0 / M_PI, sweepAngle * 180.0 / M_PI);
- resetVolatility();
+ path_.addArc(SkRect::MakeLTRB(left, top, right, bottom),
+ startAngle * 180.0 / M_PI, sweepAngle * 180.0 / M_PI);
}
void CanvasPath::addPolygon(const tonic::Float32List& points, bool close) {
- mutable_path().addPoly(reinterpret_cast<const SkPoint*>(points.data()),
- points.num_elements() / 2, close);
- resetVolatility();
+ path_.addPoly(reinterpret_cast<const SkPoint*>(points.data()),
+ points.num_elements() / 2, close);
}
void CanvasPath::addRRect(const RRect& rrect) {
- mutable_path().addRRect(rrect.sk_rrect);
- resetVolatility();
+ path_.addRRect(rrect.sk_rrect);
}
void CanvasPath::addPath(CanvasPath* path, double dx, double dy) {
@@ -249,8 +211,7 @@
Dart_ThrowException(ToDart("Path.addPath called with non-genuine Path."));
return;
}
- mutable_path().addPath(path->path(), dx, dy, SkPath::kAppend_AddPathMode);
- resetVolatility();
+ path_.addPath(path->path(), dx, dy, SkPath::kAppend_AddPathMode);
}
void CanvasPath::addPathWithMatrix(CanvasPath* path,
@@ -266,9 +227,8 @@
SkMatrix matrix = ToSkMatrix(matrix4);
matrix.setTranslateX(matrix.getTranslateX() + dx);
matrix.setTranslateY(matrix.getTranslateY() + dy);
- mutable_path().addPath(path->path(), matrix, SkPath::kAppend_AddPathMode);
+ path_.addPath(path->path(), matrix, SkPath::kAppend_AddPathMode);
matrix4.Release();
- resetVolatility();
}
void CanvasPath::extendWithPath(CanvasPath* path, double dx, double dy) {
@@ -277,8 +237,7 @@
ToDart("Path.extendWithPath called with non-genuine Path."));
return;
}
- mutable_path().addPath(path->path(), dx, dy, SkPath::kExtend_AddPathMode);
- resetVolatility();
+ path_.addPath(path->path(), dx, dy, SkPath::kExtend_AddPathMode);
}
void CanvasPath::extendWithPathAndMatrix(CanvasPath* path,
@@ -294,43 +253,37 @@
SkMatrix matrix = ToSkMatrix(matrix4);
matrix.setTranslateX(matrix.getTranslateX() + dx);
matrix.setTranslateY(matrix.getTranslateY() + dy);
- mutable_path().addPath(path->path(), matrix, SkPath::kExtend_AddPathMode);
+ path_.addPath(path->path(), matrix, SkPath::kExtend_AddPathMode);
matrix4.Release();
- resetVolatility();
}
void CanvasPath::close() {
- mutable_path().close();
- resetVolatility();
+ path_.close();
}
void CanvasPath::reset() {
- mutable_path().reset();
- resetVolatility();
+ path_.reset();
}
bool CanvasPath::contains(double x, double y) {
- return path().contains(x, y);
+ return path_.contains(x, y);
}
void CanvasPath::shift(Dart_Handle path_handle, double dx, double dy) {
fml::RefPtr<CanvasPath> path = CanvasPath::Create(path_handle);
- auto& other_mutable_path = path->mutable_path();
- mutable_path().offset(dx, dy, &other_mutable_path);
- resetVolatility();
+ path_.offset(dx, dy, &path->path_);
}
void CanvasPath::transform(Dart_Handle path_handle,
tonic::Float64List& matrix4) {
fml::RefPtr<CanvasPath> path = CanvasPath::Create(path_handle);
- auto& other_mutable_path = path->mutable_path();
- mutable_path().transform(ToSkMatrix(matrix4), &other_mutable_path);
+ path_.transform(ToSkMatrix(matrix4), &path->path_);
matrix4.Release();
}
tonic::Float32List CanvasPath::getBounds() {
tonic::Float32List rect(Dart_NewTypedData(Dart_TypedData_kFloat32, 4));
- const SkRect& bounds = path().getBounds();
+ const SkRect& bounds = path_.getBounds();
rect[0] = bounds.left();
rect[1] = bounds.top();
rect[2] = bounds.right();
@@ -340,22 +293,21 @@
bool CanvasPath::op(CanvasPath* path1, CanvasPath* path2, int operation) {
return Op(path1->path(), path2->path(), static_cast<SkPathOp>(operation),
- &tracked_path_->path);
- resetVolatility();
+ &path_);
}
void CanvasPath::clone(Dart_Handle path_handle) {
fml::RefPtr<CanvasPath> path = CanvasPath::Create(path_handle);
// per Skia docs, this will create a fast copy
// data is shared until the source path or dest path are mutated
- path->mutable_path() = this->path();
+ path->path_ = path_;
}
// This is doomed to be called too early, since Paths are mutable.
// However, it can help for some of the clone/shift/transform type methods
// where the resultant path will initially have a meaningful size.
size_t CanvasPath::GetAllocationSize() const {
- return sizeof(CanvasPath) + path().approximateBytesUsed();
+ return sizeof(CanvasPath) + path_.approximateBytesUsed();
}
} // namespace flutter
diff --git a/lib/ui/painting/path.h b/lib/ui/painting/path.h
index 3c05cdd..dbd6d7a 100644
--- a/lib/ui/painting/path.h
+++ b/lib/ui/painting/path.h
@@ -7,7 +7,6 @@
#include "flutter/lib/ui/dart_wrapper.h"
#include "flutter/lib/ui/painting/rrect.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/pathops/SkPathOps.h"
#include "third_party/tonic/typed_data/typed_list.h"
@@ -37,7 +36,7 @@
static fml::RefPtr<CanvasPath> CreateFrom(Dart_Handle path_handle,
const SkPath& src) {
fml::RefPtr<CanvasPath> path = CanvasPath::Create(path_handle);
- path->tracked_path_->path = src;
+ path->path_ = src;
return path;
}
@@ -109,24 +108,16 @@
bool op(CanvasPath* path1, CanvasPath* path2, int operation);
void clone(Dart_Handle path_handle);
- const SkPath& path() const { return tracked_path_->path; }
+ const SkPath& path() const { return path_; }
size_t GetAllocationSize() const override;
static void RegisterNatives(tonic::DartLibraryNatives* natives);
- virtual void ReleaseDartWrappableReference() const override;
-
private:
CanvasPath();
- std::shared_ptr<VolatilePathTracker> path_tracker_;
- std::shared_ptr<VolatilePathTracker::TrackedPath> tracked_path_;
-
- // Must be called whenever the path is created or mutated.
- void resetVolatility();
-
- SkPath& mutable_path() { return tracked_path_->path; }
+ SkPath path_;
};
} // namespace flutter
diff --git a/lib/ui/painting/path_unittests.cc b/lib/ui/painting/path_unittests.cc
deleted file mode 100644
index ed5a525..0000000
--- a/lib/ui/painting/path_unittests.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2013 The Flutter 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 "flutter/lib/ui/painting/path.h"
-
-#include <memory>
-
-#include "flutter/common/task_runners.h"
-#include "flutter/fml/synchronization/waitable_event.h"
-#include "flutter/runtime/dart_vm.h"
-#include "flutter/shell/common/shell_test.h"
-#include "flutter/shell/common/thread_host.h"
-#include "flutter/testing/testing.h"
-
-namespace flutter {
-namespace testing {
-
-TEST_F(ShellTest, PathVolatilityOldPathsBecomeNonVolatile) {
- auto message_latch = std::make_shared<fml::AutoResetWaitableEvent>();
-
- auto native_validate_path = [message_latch](Dart_NativeArguments args) {
- auto handle = Dart_GetNativeArgument(args, 0);
- intptr_t peer = 0;
- Dart_Handle result = Dart_GetNativeInstanceField(
- handle, tonic::DartWrappable::kPeerIndex, &peer);
- EXPECT_FALSE(Dart_IsError(result));
- CanvasPath* path = reinterpret_cast<CanvasPath*>(peer);
- EXPECT_TRUE(path);
- EXPECT_TRUE(path->path().isVolatile());
- std::shared_ptr<VolatilePathTracker> tracker =
- UIDartState::Current()->GetVolatilePathTracker();
- EXPECT_TRUE(tracker);
-
- for (int i = 0; i < VolatilePathTracker::kFramesOfVolatility; i++) {
- EXPECT_TRUE(path->path().isVolatile());
- tracker->OnFrame();
- }
- EXPECT_FALSE(path->path().isVolatile());
- message_latch->Signal();
- };
-
- Settings settings = CreateSettingsForFixture();
- TaskRunners task_runners("test", // label
- GetCurrentTaskRunner(), // platform
- CreateNewThread(), // raster
- CreateNewThread(), // ui
- CreateNewThread() // io
- );
-
- AddNativeCallback("ValidatePath", CREATE_NATIVE_ENTRY(native_validate_path));
-
- std::unique_ptr<Shell> shell =
- CreateShell(std::move(settings), std::move(task_runners));
-
- ASSERT_TRUE(shell->IsSetup());
- auto configuration = RunConfiguration::InferFromSettings(settings);
- configuration.SetEntrypoint("createPath");
-
- shell->RunEngine(std::move(configuration), [](auto result) {
- ASSERT_EQ(result, Engine::RunStatus::Success);
- });
-
- message_latch->Wait();
-
- DestroyShell(std::move(shell), std::move(task_runners));
-}
-
-TEST_F(ShellTest, PathVolatilityGCRemovesPathFromTracker) {
- auto message_latch = std::make_shared<fml::AutoResetWaitableEvent>();
-
- auto native_validate_path = [message_latch](Dart_NativeArguments args) {
- auto handle = Dart_GetNativeArgument(args, 0);
- intptr_t peer = 0;
- Dart_Handle result = Dart_GetNativeInstanceField(
- handle, tonic::DartWrappable::kPeerIndex, &peer);
- EXPECT_FALSE(Dart_IsError(result));
- CanvasPath* path = reinterpret_cast<CanvasPath*>(peer);
- EXPECT_TRUE(path);
- EXPECT_TRUE(path->path().isVolatile());
- std::shared_ptr<VolatilePathTracker> tracker =
- UIDartState::Current()->GetVolatilePathTracker();
- EXPECT_TRUE(tracker);
-
- static_assert(VolatilePathTracker::kFramesOfVolatility > 1);
- EXPECT_TRUE(path->path().isVolatile());
- tracker->OnFrame();
- EXPECT_TRUE(path->path().isVolatile());
-
- // simulate GC
- path->ReleaseDartWrappableReference();
-
- tracker->OnFrame();
- // Because the path got GC'd, it was removed from the cache and we're the
- // only one holding it.
- EXPECT_TRUE(path->path().isVolatile());
-
- message_latch->Signal();
- };
-
- Settings settings = CreateSettingsForFixture();
- TaskRunners task_runners("test", // label
- GetCurrentTaskRunner(), // platform
- CreateNewThread(), // raster
- CreateNewThread(), // ui
- CreateNewThread() // io
- );
-
- AddNativeCallback("ValidatePath", CREATE_NATIVE_ENTRY(native_validate_path));
-
- std::unique_ptr<Shell> shell =
- CreateShell(std::move(settings), std::move(task_runners));
-
- ASSERT_TRUE(shell->IsSetup());
- auto configuration = RunConfiguration::InferFromSettings(settings);
- configuration.SetEntrypoint("createPath");
-
- shell->RunEngine(std::move(configuration), [](auto result) {
- ASSERT_EQ(result, Engine::RunStatus::Success);
- });
-
- message_latch->Wait();
-
- DestroyShell(std::move(shell), std::move(task_runners));
-}
-
-} // namespace testing
-} // namespace flutter
diff --git a/lib/ui/ui_benchmarks.cc b/lib/ui/ui_benchmarks.cc
index 16a1ae2..9c0a189 100644
--- a/lib/ui/ui_benchmarks.cc
+++ b/lib/ui/ui_benchmarks.cc
@@ -4,7 +4,6 @@
#include "flutter/benchmarking/benchmarking.h"
#include "flutter/common/settings.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "flutter/lib/ui/window/platform_message_response_dart.h"
#include "flutter/runtime/dart_vm_lifecycle.h"
#include "flutter/shell/common/thread_host.h"
@@ -19,7 +18,8 @@
void TestBody() override{};
};
-static void BM_PlatformMessageResponseDartComplete(benchmark::State& state) {
+static void BM_PlatformMessageResponseDartComplete(
+ benchmark::State& state) { // NOLINT
ThreadHost thread_host("test",
ThreadHost::Type::Platform | ThreadHost::Type::RASTER |
ThreadHost::Type::IO | ThreadHost::Type::UI);
@@ -67,54 +67,7 @@
}
}
-static void BM_PathVolatilityTracker(benchmark::State& state) {
- ThreadHost thread_host("test",
- ThreadHost::Type::Platform | ThreadHost::Type::RASTER |
- ThreadHost::Type::IO | ThreadHost::Type::UI);
- TaskRunners task_runners("test", thread_host.platform_thread->GetTaskRunner(),
- thread_host.raster_thread->GetTaskRunner(),
- thread_host.ui_thread->GetTaskRunner(),
- thread_host.io_thread->GetTaskRunner());
-
- VolatilePathTracker tracker(task_runners.GetUITaskRunner());
-
- while (state.KeepRunning()) {
- std::vector<std::shared_ptr<VolatilePathTracker::TrackedPath>> paths;
- constexpr int path_count = 1000;
- for (int i = 0; i < path_count; i++) {
- auto path = std::make_shared<VolatilePathTracker::TrackedPath>();
- path->path = SkPath();
- path->path.setIsVolatile(true);
- paths.push_back(std::move(path));
- }
-
- fml::AutoResetWaitableEvent latch;
- task_runners.GetUITaskRunner()->PostTask([&]() {
- for (auto path : paths) {
- tracker.Insert(path);
- }
- latch.Signal();
- });
-
- latch.Wait();
-
- task_runners.GetUITaskRunner()->PostTask([&]() { tracker.OnFrame(); });
-
- for (int i = 0; i < path_count - 10; ++i) {
- tracker.Erase(paths[i]);
- }
-
- task_runners.GetUITaskRunner()->PostTask([&]() { tracker.OnFrame(); });
-
- latch.Reset();
- task_runners.GetUITaskRunner()->PostTask([&]() { latch.Signal(); });
- latch.Wait();
- }
-}
-
BENCHMARK(BM_PlatformMessageResponseDartComplete)
->Unit(benchmark::kMicrosecond);
-BENCHMARK(BM_PathVolatilityTracker)->Unit(benchmark::kMillisecond);
-
} // namespace flutter
diff --git a/lib/ui/ui_dart_state.cc b/lib/ui/ui_dart_state.cc
index 3268e50..eac2185 100644
--- a/lib/ui/ui_dart_state.cc
+++ b/lib/ui/ui_dart_state.cc
@@ -27,8 +27,7 @@
std::string logger_prefix,
UnhandledExceptionCallback unhandled_exception_callback,
std::shared_ptr<IsolateNameServer> isolate_name_server,
- bool is_root_isolate,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker)
+ bool is_root_isolate)
: task_runners_(std::move(task_runners)),
add_callback_(std::move(add_callback)),
remove_callback_(std::move(remove_callback)),
@@ -37,7 +36,6 @@
io_manager_(std::move(io_manager)),
skia_unref_queue_(std::move(skia_unref_queue)),
image_decoder_(std::move(image_decoder)),
- volatile_path_tracker_(std::move(volatile_path_tracker)),
advisory_script_uri_(std::move(advisory_script_uri)),
advisory_script_entrypoint_(std::move(advisory_script_entrypoint)),
logger_prefix_(std::move(logger_prefix)),
@@ -108,11 +106,6 @@
return skia_unref_queue_;
}
-std::shared_ptr<VolatilePathTracker> UIDartState::GetVolatilePathTracker()
- const {
- return volatile_path_tracker_;
-}
-
void UIDartState::ScheduleMicrotask(Dart_Handle closure) {
if (tonic::LogIfError(closure) || !Dart_IsClosure(closure)) {
return;
diff --git a/lib/ui/ui_dart_state.h b/lib/ui/ui_dart_state.h
index d1f66ba..d5c22ff 100644
--- a/lib/ui/ui_dart_state.h
+++ b/lib/ui/ui_dart_state.h
@@ -20,7 +20,6 @@
#include "flutter/lib/ui/isolate_name_server/isolate_name_server.h"
#include "flutter/lib/ui/painting/image_decoder.h"
#include "flutter/lib/ui/snapshot_delegate.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "third_party/dart/runtime/include/dart_api.h"
#include "third_party/skia/include/gpu/GrDirectContext.h"
#include "third_party/tonic/dart_microtask_queue.h"
@@ -60,8 +59,6 @@
fml::RefPtr<flutter::SkiaUnrefQueue> GetSkiaUnrefQueue() const;
- std::shared_ptr<VolatilePathTracker> GetVolatilePathTracker() const;
-
fml::WeakPtr<SnapshotDelegate> GetSnapshotDelegate() const;
fml::WeakPtr<HintFreedDelegate> GetHintFreedDelegate() const;
@@ -102,8 +99,7 @@
std::string logger_prefix,
UnhandledExceptionCallback unhandled_exception_callback,
std::shared_ptr<IsolateNameServer> isolate_name_server,
- bool is_root_isolate_,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ bool is_root_isolate_);
~UIDartState() override;
@@ -125,7 +121,6 @@
fml::WeakPtr<IOManager> io_manager_;
fml::RefPtr<SkiaUnrefQueue> skia_unref_queue_;
fml::WeakPtr<ImageDecoder> image_decoder_;
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker_;
const std::string advisory_script_uri_;
const std::string advisory_script_entrypoint_;
const std::string logger_prefix_;
diff --git a/lib/ui/volatile_path_tracker.cc b/lib/ui/volatile_path_tracker.cc
deleted file mode 100644
index 2922a1d..0000000
--- a/lib/ui/volatile_path_tracker.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2013 The Flutter 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 "flutter/lib/ui/volatile_path_tracker.h"
-
-namespace flutter {
-
-VolatilePathTracker::VolatilePathTracker(
- fml::RefPtr<fml::TaskRunner> ui_task_runner)
- : ui_task_runner_(ui_task_runner) {}
-
-void VolatilePathTracker::Insert(std::shared_ptr<TrackedPath> path) {
- FML_DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
- FML_DCHECK(path);
- FML_DCHECK(path->path.isVolatile());
- paths_.insert(path);
-}
-
-void VolatilePathTracker::Erase(std::shared_ptr<TrackedPath> path) {
- FML_DCHECK(path);
- if (ui_task_runner_->RunsTasksOnCurrentThread()) {
- paths_.erase(path);
- return;
- }
-
- std::scoped_lock lock(paths_to_remove_mutex_);
- needs_drain_ = true;
- paths_to_remove_.push_back(path);
-}
-
-void VolatilePathTracker::OnFrame() {
- FML_DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
- std::string total_count = std::to_string(paths_.size());
- TRACE_EVENT1("flutter", "VolatilePathTracker::OnFrame", "total_count",
- total_count.c_str());
-
- Drain();
-
- std::set<std::shared_ptr<TrackedPath>> surviving_paths_;
- for (const std::shared_ptr<TrackedPath> path : paths_) {
- path->frame_count++;
- if (path->frame_count >= kFramesOfVolatility) {
- path->path.setIsVolatile(false);
- path->tracking_volatility = false;
- } else {
- surviving_paths_.insert(path);
- }
- }
- paths_.swap(surviving_paths_);
- std::string post_removal_count = std::to_string(paths_.size());
- TRACE_EVENT_INSTANT1("flutter", "VolatilePathTracker::OnFrame",
- "remaining_count", post_removal_count.c_str());
-}
-
-void VolatilePathTracker::Drain() {
- if (needs_drain_) {
- TRACE_EVENT0("flutter", "VolatilePathTracker::Drain");
- std::deque<std::shared_ptr<TrackedPath>> paths_to_remove;
- {
- std::scoped_lock lock(paths_to_remove_mutex_);
- paths_to_remove.swap(paths_to_remove_);
- needs_drain_ = false;
- }
- std::string count = std::to_string(paths_to_remove.size());
- TRACE_EVENT_INSTANT1("flutter", "VolatilePathTracker::Drain", "count",
- count.c_str());
- for (auto path : paths_to_remove) {
- paths_.erase(path);
- }
- }
-}
-
-} // namespace flutter
diff --git a/lib/ui/volatile_path_tracker.h b/lib/ui/volatile_path_tracker.h
deleted file mode 100644
index a0ca699..0000000
--- a/lib/ui/volatile_path_tracker.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2013 The Flutter 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 FLUTTER_LIB_VOLATILE_PATH_TRACKER_H_
-#define FLUTTER_LIB_VOLATILE_PATH_TRACKER_H_
-
-#include <deque>
-#include <mutex>
-#include <set>
-
-#include "flutter/fml/macros.h"
-#include "flutter/fml/task_runner.h"
-#include "flutter/fml/trace_event.h"
-#include "third_party/skia/include/core/SkPath.h"
-
-namespace flutter {
-
-/// A cache for paths drawn from dart:ui.
-///
-/// Whenever a flutter::CanvasPath is created, it must Insert an entry into
-/// this cache. Whenever a frame is drawn, the shell must call OnFrame. The
-/// cache will flip the volatility bit on the SkPath and remove it from the
-/// cache. If the Dart object is released, Erase must be called to avoid
-/// tracking a path that is no longer referenced in Dart code.
-class VolatilePathTracker {
- public:
- /// The fields of this struct must only accessed on the UI task runner.
- struct TrackedPath {
- bool tracking_volatility = false;
- int frame_count = 0;
- SkPath path;
- };
-
- explicit VolatilePathTracker(fml::RefPtr<fml::TaskRunner> ui_task_runner);
-
- static constexpr int kFramesOfVolatility = 2;
-
- // Starts tracking a path.
- // Must be called from the UI task runner.
- //
- // Callers should only insert paths that are currently volatile.
- void Insert(std::shared_ptr<TrackedPath> path);
-
- // Removes a path from tracking.
- //
- // May be called from any thread.
- void Erase(std::shared_ptr<TrackedPath> path);
-
- // Called by the shell at the end of a frame after notifying Dart about idle
- // time.
- //
- // This method will flip the volatility bit to false for any paths that have
- // survived the |kFramesOfVolatility|.
- //
- // Must be called from the UI task runner.
- void OnFrame();
-
- private:
- fml::RefPtr<fml::TaskRunner> ui_task_runner_;
- std::atomic_bool needs_drain_ = false;
- std::mutex paths_to_remove_mutex_;
- std::deque<std::shared_ptr<TrackedPath>> paths_to_remove_;
- std::set<std::shared_ptr<TrackedPath>> paths_;
-
- void Drain();
-
- FML_DISALLOW_COPY_AND_ASSIGN(VolatilePathTracker);
-};
-
-} // namespace flutter
-
-#endif // FLUTTER_LIB_VOLATILE_PATH_TRACKER_H_
diff --git a/runtime/dart_isolate.cc b/runtime/dart_isolate.cc
index 15fe61f..095c496 100644
--- a/runtime/dart_isolate.cc
+++ b/runtime/dart_isolate.cc
@@ -90,8 +90,7 @@
const fml::closure& isolate_shutdown_callback,
std::optional<std::string> dart_entrypoint,
std::optional<std::string> dart_entrypoint_library,
- std::unique_ptr<IsolateConfiguration> isolate_configration,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker) {
+ std::unique_ptr<IsolateConfiguration> isolate_configration) {
if (!isolate_snapshot) {
FML_LOG(ERROR) << "Invalid isolate snapshot.";
return {};
@@ -118,8 +117,7 @@
advisory_script_entrypoint, //
isolate_flags, //
isolate_create_callback, //
- isolate_shutdown_callback, //
- std::move(volatile_path_tracker) //
+ isolate_shutdown_callback //
)
.lock();
@@ -189,8 +187,7 @@
std::string advisory_script_entrypoint,
Flags flags,
const fml::closure& isolate_create_callback,
- const fml::closure& isolate_shutdown_callback,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker) {
+ const fml::closure& isolate_shutdown_callback) {
TRACE_EVENT0("flutter", "DartIsolate::CreateRootIsolate");
// The child isolate preparer is null but will be set when the isolate is
@@ -209,17 +206,16 @@
auto isolate_data = std::make_unique<std::shared_ptr<DartIsolate>>(
std::shared_ptr<DartIsolate>(new DartIsolate(
- settings, // settings
- task_runners, // task runners
- std::move(snapshot_delegate), // snapshot delegate
- std::move(hint_freed_delegate), // hint freed delegate
- std::move(io_manager), // IO manager
- std::move(unref_queue), // Skia unref queue
- std::move(image_decoder), // Image Decoder
- advisory_script_uri, // advisory URI
- advisory_script_entrypoint, // advisory entrypoint
- true, // is_root_isolate
- std::move(volatile_path_tracker) // volatile path tracker
+ settings, // settings
+ task_runners, // task runners
+ std::move(snapshot_delegate), // snapshot delegate
+ std::move(hint_freed_delegate), // hint freed delegate
+ std::move(io_manager), // IO manager
+ std::move(unref_queue), // Skia unref queue
+ std::move(image_decoder), // Image Decoder
+ advisory_script_uri, // advisory URI
+ advisory_script_entrypoint, // advisory entrypoint
+ true // is_root_isolate
)));
DartErrorString error;
@@ -245,18 +241,16 @@
return (*root_isolate_data)->GetWeakIsolatePtr();
}
-DartIsolate::DartIsolate(
- const Settings& settings,
- TaskRunners task_runners,
- fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
- fml::WeakPtr<HintFreedDelegate> hint_freed_delegate,
- fml::WeakPtr<IOManager> io_manager,
- fml::RefPtr<SkiaUnrefQueue> unref_queue,
- fml::WeakPtr<ImageDecoder> image_decoder,
- std::string advisory_script_uri,
- std::string advisory_script_entrypoint,
- bool is_root_isolate,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker)
+DartIsolate::DartIsolate(const Settings& settings,
+ TaskRunners task_runners,
+ fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
+ fml::WeakPtr<HintFreedDelegate> hint_freed_delegate,
+ fml::WeakPtr<IOManager> io_manager,
+ fml::RefPtr<SkiaUnrefQueue> unref_queue,
+ fml::WeakPtr<ImageDecoder> image_decoder,
+ std::string advisory_script_uri,
+ std::string advisory_script_entrypoint,
+ bool is_root_isolate)
: UIDartState(std::move(task_runners),
settings.task_observer_add,
settings.task_observer_remove,
@@ -270,8 +264,7 @@
settings.log_tag,
settings.unhandled_exception_callback,
DartVMRef::GetIsolateNameServer(),
- is_root_isolate,
- std::move(volatile_path_tracker)),
+ is_root_isolate),
may_insecurely_connect_to_all_domains_(
settings.may_insecurely_connect_to_all_domains),
domain_network_policy_(settings.domain_network_policy) {
@@ -759,8 +752,7 @@
DART_VM_SERVICE_ISOLATE_NAME, // script entrypoint
DartIsolate::Flags{flags}, // flags
nullptr, // isolate create callback
- nullptr, // isolate shutdown callback
- nullptr // volatile path tracker
+ nullptr // isolate shutdown callback
);
std::shared_ptr<DartIsolate> service_isolate = weak_service_isolate.lock();
@@ -866,8 +858,7 @@
fml::WeakPtr<ImageDecoder>{}, // image_decoder
advisory_script_uri, // advisory_script_uri
advisory_script_entrypoint, // advisory_script_entrypoint
- false, // is_root_isolate
- nullptr))); // volatile path tracker
+ false))); // is_root_isolate
Dart_Isolate vm_isolate = CreateDartIsolateGroup(
std::move(isolate_group_data), std::move(isolate_data), flags, error);
@@ -912,8 +903,7 @@
(*isolate_group_data)->GetAdvisoryScriptURI(), // advisory_script_uri
(*isolate_group_data)
->GetAdvisoryScriptEntrypoint(), // advisory_script_entrypoint
- false, // is_root_isolate
- nullptr))); // volatile path tracker
+ false))); // is_root_isolate
// root isolate should have been created via CreateRootIsolate
if (!InitializeIsolate(*embedder_isolate, isolate, error)) {
diff --git a/runtime/dart_isolate.h b/runtime/dart_isolate.h
index 81a4c8b..457d7ed 100644
--- a/runtime/dart_isolate.h
+++ b/runtime/dart_isolate.h
@@ -19,7 +19,6 @@
#include "flutter/lib/ui/io_manager.h"
#include "flutter/lib/ui/snapshot_delegate.h"
#include "flutter/lib/ui/ui_dart_state.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "flutter/lib/ui/window/platform_configuration.h"
#include "flutter/runtime/dart_snapshot.h"
#include "third_party/dart/runtime/include/dart_api.h"
@@ -231,8 +230,7 @@
const fml::closure& isolate_shutdown_callback,
std::optional<std::string> dart_entrypoint,
std::optional<std::string> dart_entrypoint_library,
- std::unique_ptr<IsolateConfiguration> isolate_configration,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ std::unique_ptr<IsolateConfiguration> isolate_configration);
// |UIDartState|
~DartIsolate() override;
@@ -432,8 +430,7 @@
std::string advisory_script_entrypoint,
Flags flags,
const fml::closure& isolate_create_callback,
- const fml::closure& isolate_shutdown_callback,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ const fml::closure& isolate_shutdown_callback);
DartIsolate(const Settings& settings,
TaskRunners task_runners,
@@ -444,8 +441,7 @@
fml::WeakPtr<ImageDecoder> image_decoder,
std::string advisory_script_uri,
std::string advisory_script_entrypoint,
- bool is_root_isolate,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ bool is_root_isolate);
[[nodiscard]] bool Initialize(Dart_Isolate isolate);
diff --git a/runtime/dart_isolate_unittests.cc b/runtime/dart_isolate_unittests.cc
index 1b59e70..8c0116e 100644
--- a/runtime/dart_isolate_unittests.cc
+++ b/runtime/dart_isolate_unittests.cc
@@ -68,8 +68,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
"main", // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // Volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
);
auto root_isolate = weak_isolate.lock();
ASSERT_TRUE(root_isolate);
@@ -109,8 +108,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
"main", // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // Volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
);
auto root_isolate = weak_isolate.lock();
ASSERT_TRUE(root_isolate);
@@ -368,8 +366,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
"main", // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // Volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
);
auto root_isolate = weak_isolate.lock();
ASSERT_TRUE(root_isolate);
@@ -469,8 +466,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
"main", // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
);
auto root_isolate = weak_isolate.lock();
ASSERT_TRUE(root_isolate);
diff --git a/runtime/dart_lifecycle_unittests.cc b/runtime/dart_lifecycle_unittests.cc
index 09de19f..8576b3f 100644
--- a/runtime/dart_lifecycle_unittests.cc
+++ b/runtime/dart_lifecycle_unittests.cc
@@ -73,8 +73,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback,
entrypoint, // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // Volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
)
.lock();
diff --git a/runtime/fixtures/runtime_test.dart b/runtime/fixtures/runtime_test.dart
index 9e137e1..d559e6e 100644
--- a/runtime/fixtures/runtime_test.dart
+++ b/runtime/fixtures/runtime_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart=2.10
-
import 'dart:async';
import 'dart:isolate';
import 'dart:ui';
diff --git a/runtime/fixtures/split_lib_test.dart b/runtime/fixtures/split_lib_test.dart
index 1f48225..5d811fc 100644
--- a/runtime/fixtures/split_lib_test.dart
+++ b/runtime/fixtures/split_lib_test.dart
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// @dart=2.10
-
library splitlib;
int splitAdd(int i, int j) {
diff --git a/runtime/runtime_controller.cc b/runtime/runtime_controller.cc
index 4998a9a..6e512f1 100644
--- a/runtime/runtime_controller.cc
+++ b/runtime/runtime_controller.cc
@@ -37,8 +37,7 @@
const PlatformData& p_platform_data,
const fml::closure& p_isolate_create_callback,
const fml::closure& p_isolate_shutdown_callback,
- std::shared_ptr<const fml::Mapping> p_persistent_isolate_data,
- std::shared_ptr<VolatilePathTracker> p_volatile_path_tracker)
+ std::shared_ptr<const fml::Mapping> p_persistent_isolate_data)
: client_(p_client),
vm_(p_vm),
isolate_snapshot_(std::move(p_isolate_snapshot)),
@@ -54,8 +53,7 @@
platform_data_(std::move(p_platform_data)),
isolate_create_callback_(p_isolate_create_callback),
isolate_shutdown_callback_(p_isolate_shutdown_callback),
- persistent_isolate_data_(std::move(p_persistent_isolate_data)),
- volatile_path_tracker_(std::move(p_volatile_path_tracker)) {}
+ persistent_isolate_data_(std::move(p_persistent_isolate_data)) {}
RuntimeController::~RuntimeController() {
FML_DCHECK(Dart_CurrentIsolate() == nullptr);
@@ -95,8 +93,7 @@
platform_data_, //
isolate_create_callback_, //
isolate_shutdown_callback_, //
- persistent_isolate_data_, //
- volatile_path_tracker_ //
+ persistent_isolate_data_ //
));
}
@@ -372,8 +369,7 @@
isolate_shutdown_callback_, //
dart_entrypoint, //
dart_entrypoint_library, //
- std::move(isolate_configuration), //
- volatile_path_tracker_ //
+ std::move(isolate_configuration) //
)
.lock();
diff --git a/runtime/runtime_controller.h b/runtime/runtime_controller.h
index 5e2c26d..5bca3a4 100644
--- a/runtime/runtime_controller.h
+++ b/runtime/runtime_controller.h
@@ -15,7 +15,6 @@
#include "flutter/lib/ui/io_manager.h"
#include "flutter/lib/ui/text/font_collection.h"
#include "flutter/lib/ui/ui_dart_state.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "flutter/lib/ui/window/platform_configuration.h"
#include "flutter/lib/ui/window/pointer_data_packet.h"
#include "flutter/runtime/dart_vm.h"
@@ -111,8 +110,6 @@
/// @param[in] persistent_isolate_data Unstructured persistent read-only
/// data that the root isolate can
/// access in a synchronous manner.
- /// @param[in] volatile_path_tracker Cache for tracking path
- /// volatility.
///
RuntimeController(
RuntimeDelegate& client,
@@ -130,8 +127,7 @@
const PlatformData& platform_data,
const fml::closure& isolate_create_callback,
const fml::closure& isolate_shutdown_callback,
- std::shared_ptr<const fml::Mapping> persistent_isolate_data,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ std::shared_ptr<const fml::Mapping> persistent_isolate_data);
// |PlatformConfigurationClient|
~RuntimeController() override;
@@ -580,7 +576,6 @@
const fml::closure isolate_create_callback_;
const fml::closure isolate_shutdown_callback_;
std::shared_ptr<const fml::Mapping> persistent_isolate_data_;
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker_;
PlatformConfiguration* GetPlatformConfigurationIfAvailable();
diff --git a/shell/common/engine.cc b/shell/common/engine.cc
index 84de3e2..2a90326 100644
--- a/shell/common/engine.cc
+++ b/shell/common/engine.cc
@@ -66,8 +66,7 @@
std::unique_ptr<Animator> animator,
fml::WeakPtr<IOManager> io_manager,
fml::RefPtr<SkiaUnrefQueue> unref_queue,
- fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker)
+ fml::WeakPtr<SnapshotDelegate> snapshot_delegate)
: Engine(delegate,
dispatcher_maker,
vm.GetConcurrentWorkerTaskRunner(),
@@ -92,8 +91,7 @@
platform_data, // platform data
settings_.isolate_create_callback, // isolate create callback
settings_.isolate_shutdown_callback, // isolate shutdown callback
- settings_.persistent_isolate_data, // persistent isolate data
- std::move(volatile_path_tracker) // volatile path tracker
+ settings_.persistent_isolate_data // persistent isolate data
);
}
diff --git a/shell/common/engine.h b/shell/common/engine.h
index 8041e14..85b7ece 100644
--- a/shell/common/engine.h
+++ b/shell/common/engine.h
@@ -19,7 +19,6 @@
#include "flutter/lib/ui/semantics/semantics_node.h"
#include "flutter/lib/ui/snapshot_delegate.h"
#include "flutter/lib/ui/text/font_collection.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "flutter/lib/ui/window/platform_message.h"
#include "flutter/lib/ui/window/viewport_metrics.h"
#include "flutter/runtime/dart_vm.h"
@@ -351,8 +350,7 @@
std::unique_ptr<Animator> animator,
fml::WeakPtr<IOManager> io_manager,
fml::RefPtr<SkiaUnrefQueue> unref_queue,
- fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ fml::WeakPtr<SnapshotDelegate> snapshot_delegate);
//----------------------------------------------------------------------------
/// @brief Destroys the engine engine. Called by the shell on the UI task
diff --git a/shell/common/shell.cc b/shell/common/shell.cc
index a58451f..a8fa087 100644
--- a/shell/common/shell.cc
+++ b/shell/common/shell.cc
@@ -20,7 +20,6 @@
#include "flutter/fml/paths.h"
#include "flutter/fml/trace_event.h"
#include "flutter/fml/unique_fd.h"
-#include "flutter/lib/ui/painting/path.h"
#include "flutter/runtime/dart_vm.h"
#include "flutter/shell/common/engine.h"
#include "flutter/shell/common/skia_event_tracer_impl.h"
@@ -53,9 +52,8 @@
return nullptr;
}
- auto shell = std::unique_ptr<Shell>(new Shell(
- std::move(vm), task_runners, settings,
- std::make_shared<VolatilePathTracker>(task_runners.GetUITaskRunner())));
+ auto shell =
+ std::unique_ptr<Shell>(new Shell(std::move(vm), task_runners, settings));
// Create the rasterizer on the raster thread.
std::promise<std::unique_ptr<Rasterizer>> rasterizer_promise;
@@ -151,18 +149,17 @@
std::move(vsync_waiter));
engine_promise.set_value(std::make_unique<Engine>(
- *shell, //
- dispatcher_maker, //
- *shell->GetDartVM(), //
- std::move(isolate_snapshot), //
- task_runners, //
- platform_data, //
- shell->GetSettings(), //
- std::move(animator), //
- weak_io_manager_future.get(), //
- unref_queue_future.get(), //
- snapshot_delegate_future.get(), //
- shell->volatile_path_tracker_ //
+ *shell, //
+ dispatcher_maker, //
+ *shell->GetDartVM(), //
+ std::move(isolate_snapshot), //
+ task_runners, //
+ platform_data, //
+ shell->GetSettings(), //
+ std::move(animator), //
+ weak_io_manager_future.get(), //
+ unref_queue_future.get(), //
+ snapshot_delegate_future.get() //
));
}));
@@ -324,15 +321,11 @@
return shell;
}
-Shell::Shell(DartVMRef vm,
- TaskRunners task_runners,
- Settings settings,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker)
+Shell::Shell(DartVMRef vm, TaskRunners task_runners, Settings settings)
: task_runners_(std::move(task_runners)),
settings_(std::move(settings)),
vm_(std::move(vm)),
is_gpu_disabled_sync_switch_(new fml::SyncSwitch()),
- volatile_path_tracker_(std::move(volatile_path_tracker)),
weak_factory_gpu_(nullptr),
weak_factory_(this) {
FML_CHECK(vm_) << "Must have access to VM to create a shell.";
@@ -1036,7 +1029,6 @@
if (engine_) {
engine_->NotifyIdle(deadline);
- volatile_path_tracker_->OnFrame();
}
}
diff --git a/shell/common/shell.h b/shell/common/shell.h
index 503347c..2166450 100644
--- a/shell/common/shell.h
+++ b/shell/common/shell.h
@@ -27,7 +27,6 @@
#include "flutter/fml/time/time_point.h"
#include "flutter/lib/ui/semantics/custom_accessibility_action.h"
#include "flutter/lib/ui/semantics/semantics_node.h"
-#include "flutter/lib/ui/volatile_path_tracker.h"
#include "flutter/lib/ui/window/platform_message.h"
#include "flutter/runtime/dart_vm_lifecycle.h"
#include "flutter/runtime/service_protocol.h"
@@ -411,7 +410,6 @@
std::unique_ptr<Rasterizer> rasterizer_; // on raster task runner
std::unique_ptr<ShellIOManager> io_manager_; // on IO task runner
std::shared_ptr<fml::SyncSwitch> is_gpu_disabled_sync_switch_;
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker_;
fml::WeakPtr<Engine> weak_engine_; // to be shared across threads
fml::TaskRunnerAffineWeakPtr<Rasterizer>
@@ -461,10 +459,7 @@
// How many frames have been timed since last report.
size_t UnreportedFramesCount() const;
- Shell(DartVMRef vm,
- TaskRunners task_runners,
- Settings settings,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker);
+ Shell(DartVMRef vm, TaskRunners task_runners, Settings settings);
static std::unique_ptr<Shell> CreateShellOnPlatformThread(
DartVMRef vm,
diff --git a/testing/dart/path_test.dart b/testing/dart/path_test.dart
index e635ed8..cd9db9d 100644
--- a/testing/dart/path_test.dart
+++ b/testing/dart/path_test.dart
@@ -78,14 +78,6 @@
expect(p1.getBounds().bottom, equals(p2.getBounds().bottom + 10));
});
- test('shift tests', () {
- const Rect bounds = Rect.fromLTRB(0.0, 0.0, 10.0, 10.0);
- final Path p = Path()..addRect(bounds);
- expect(p.getBounds(), equals(bounds));
- final Path shifted = p.shift(const Offset(10, 10));
- expect(shifted.getBounds(), equals(const Rect.fromLTRB(10, 10, 20, 20)));
- });
-
test('transformation tests', () {
const Rect bounds = Rect.fromLTRB(0.0, 0.0, 10.0, 10.0);
final Path p = Path()..addRect(bounds);
diff --git a/testing/dart_isolate_runner.cc b/testing/dart_isolate_runner.cc
index 86f6c66..43d77c0 100644
--- a/testing/dart_isolate_runner.cc
+++ b/testing/dart_isolate_runner.cc
@@ -56,8 +56,7 @@
std::string entrypoint,
const std::vector<std::string>& args,
const std::string& fixtures_path,
- fml::WeakPtr<IOManager> io_manager,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker) {
+ fml::WeakPtr<IOManager> io_manager) {
FML_CHECK(task_runners.GetUITaskRunner()->RunsTasksOnCurrentThread());
if (!vm_ref) {
@@ -127,8 +126,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
entrypoint, // entrypoint
std::nullopt, // library
- std::move(isolate_configuration), // isolate configuration
- std::move(volatile_path_tracker) // volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
)
.lock();
@@ -148,15 +146,14 @@
std::string entrypoint,
const std::vector<std::string>& args,
const std::string& fixtures_path,
- fml::WeakPtr<IOManager> io_manager,
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker) {
+ fml::WeakPtr<IOManager> io_manager) {
std::unique_ptr<AutoIsolateShutdown> result;
fml::AutoResetWaitableEvent latch;
fml::TaskRunner::RunNowOrPostTask(
task_runners.GetUITaskRunner(), fml::MakeCopyable([&]() mutable {
result = RunDartCodeInIsolateOnUITaskRunner(
vm_ref, settings, task_runners, entrypoint, args, fixtures_path,
- io_manager, std::move(volatile_path_tracker));
+ io_manager);
latch.Signal();
}));
latch.Wait();
diff --git a/testing/dart_isolate_runner.h b/testing/dart_isolate_runner.h
index ab6029e..83c91a1 100644
--- a/testing/dart_isolate_runner.h
+++ b/testing/dart_isolate_runner.h
@@ -42,16 +42,14 @@
FML_DISALLOW_COPY_AND_ASSIGN(AutoIsolateShutdown);
};
-void RunDartCodeInIsolate(
- DartVMRef& vm_ref,
- std::unique_ptr<AutoIsolateShutdown>& result,
- const Settings& settings,
- const TaskRunners& task_runners,
- std::string entrypoint,
- const std::vector<std::string>& args,
- const std::string& fixtures_path,
- fml::WeakPtr<IOManager> io_manager = {},
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker = nullptr);
+void RunDartCodeInIsolate(DartVMRef& vm_ref,
+ std::unique_ptr<AutoIsolateShutdown>& result,
+ const Settings& settings,
+ const TaskRunners& task_runners,
+ std::string entrypoint,
+ const std::vector<std::string>& args,
+ const std::string& fixtures_path,
+ fml::WeakPtr<IOManager> io_manager = {});
std::unique_ptr<AutoIsolateShutdown> RunDartCodeInIsolate(
DartVMRef& vm_ref,
@@ -60,8 +58,7 @@
std::string entrypoint,
const std::vector<std::string>& args,
const std::string& fixtures_path,
- fml::WeakPtr<IOManager> io_manager = {},
- std::shared_ptr<VolatilePathTracker> volatile_path_tracker = nullptr);
+ fml::WeakPtr<IOManager> io_manager = {});
} // namespace testing
} // namespace flutter
diff --git a/third_party/tonic/tests/dart_state_unittest.cc b/third_party/tonic/tests/dart_state_unittest.cc
index 8a91cc2..3d053de 100644
--- a/third_party/tonic/tests/dart_state_unittest.cc
+++ b/third_party/tonic/tests/dart_state_unittest.cc
@@ -44,8 +44,7 @@
settings.isolate_shutdown_callback, // isolate shutdown callback
"main", // dart entrypoint
std::nullopt, // dart entrypoint library
- std::move(isolate_configuration), // isolate configuration
- nullptr // Volatile path tracker
+ std::move(isolate_configuration) // isolate configuration
);
auto root_isolate = weak_isolate.lock();
ASSERT_TRUE(root_isolate);