Commit 51af4920 authored by Michael Lippautz's avatar Michael Lippautz Committed by Chromium LUCI CQ

FrameCaret: Avoid dynamic allocation of timer task

A past refactoring translated `unique_ptr<TaskRunnerTimer>` to
`Member<DisallowNewWrapper<HeapTaskRunnerTimer>>` to preserve
semantics. Inline HeapTaskRunnerTimer which avoids a dynamic
allocation.

Change-Id: I8a859c068c9889b5e2bafb01619138ad2f1e0e59
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2642326Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845644}
parent 9e30f607
......@@ -50,11 +50,9 @@ FrameCaret::FrameCaret(LocalFrame& frame,
: selection_editor_(&selection_editor),
frame_(frame),
display_item_client_(new CaretDisplayItemClient()),
caret_blink_timer_(MakeGarbageCollected<
DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>>(
frame.GetTaskRunner(TaskType::kInternalDefault),
this,
&FrameCaret::CaretBlinkTimerFired)) {}
caret_blink_timer_(frame.GetTaskRunner(TaskType::kInternalDefault),
this,
&FrameCaret::CaretBlinkTimerFired) {}
FrameCaret::~FrameCaret() = default;
......@@ -104,22 +102,22 @@ void FrameCaret::UpdateAppearance() {
}
void FrameCaret::StopCaretBlinkTimer() {
if (caret_blink_timer_->Value().IsActive() ||
if (caret_blink_timer_.IsActive() ||
display_item_client_->IsVisibleIfActive())
ScheduleVisualUpdateForPaintInvalidationIfNeeded();
display_item_client_->SetVisibleIfActive(false);
caret_blink_timer_->Value().Stop();
caret_blink_timer_.Stop();
}
void FrameCaret::StartBlinkCaret() {
// Start blinking with a black caret. Be sure not to restart if we're
// already blinking in the right location.
if (caret_blink_timer_->Value().IsActive())
if (caret_blink_timer_.IsActive())
return;
base::TimeDelta blink_interval = LayoutTheme::GetTheme().CaretBlinkInterval();
if (!blink_interval.is_zero())
caret_blink_timer_->Value().StartRepeating(blink_interval, FROM_HERE);
caret_blink_timer_.StartRepeating(blink_interval, FROM_HERE);
display_item_client_->SetVisibleIfActive(true);
ScheduleVisualUpdateForPaintInvalidationIfNeeded();
......@@ -224,9 +222,7 @@ void FrameCaret::ScheduleVisualUpdateForPaintInvalidationIfNeeded() {
void FrameCaret::RecreateCaretBlinkTimerForTesting(
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
caret_blink_timer_ =
MakeGarbageCollected<DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>>(
std::move(task_runner), this, &FrameCaret::CaretBlinkTimerFired);
caret_blink_timer_.MoveToNewTaskRunner(std::move(task_runner));
}
bool FrameCaret::IsVisibleIfActiveForTesting() const {
......
......@@ -102,8 +102,7 @@ class CORE_EXPORT FrameCaret final : public GarbageCollected<FrameCaret> {
const Member<LocalFrame> frame_;
const std::unique_ptr<CaretDisplayItemClient> display_item_client_;
// TODO(https://crbug.com/668758): Consider using BeginFrame update for this.
Member<DisallowNewWrapper<HeapTaskRunnerTimer<FrameCaret>>>
caret_blink_timer_;
HeapTaskRunnerTimer<FrameCaret> caret_blink_timer_;
bool is_caret_enabled_ = false;
bool should_show_caret_ = false;
bool is_caret_blinking_suspended_ = false;
......
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