Commit f5725087 authored by Francois Doray's avatar Francois Doray Committed by Commit Bot

Add LifecycleUnit::Freeze().

A frozen LifecycleUnit can't use the CPU.

Note: This feature will  be test by a browser test in
https://chromium-review.googlesource.com/c/chromium/src/+/980742/5/chrome/browser/resource_coordinator/tab_manager_browsertest.cc#814

Bug: 775644
Change-Id: I5b5aac616e7a5d28b61f379d841da2b75420300d
Reviewed-on: https://chromium-review.googlesource.com/981396
Commit-Queue: François Doray <fdoray@chromium.org>
Reviewed-by: default avatarSébastien Marchand <sebmarchand@chromium.org>
Reviewed-by: default avatarFadi Meawad <fmeawad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#547714}
parent 8de4733a
......@@ -47,6 +47,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase {
base::string16 GetTitle() const override { return base::string16(); }
std::string GetIconURL() const override { return std::string(); }
SortKey GetSortKey() const override { return SortKey(last_focused_time_); }
bool Freeze() override { return false; }
int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; }
bool CanDiscard(DiscardReason reason) const override { return false; }
bool Discard(DiscardReason discard_reason) override { return false; }
......
......@@ -78,6 +78,10 @@ class LifecycleUnit {
// Returns the last time that the visibility of the LifecycleUnit changed.
virtual base::TimeTicks GetLastVisibilityChangeTime() const = 0;
// Freezes this LifecycleUnit, i.e. prevents it from using the CPU. Returns
// true on success.
virtual bool Freeze() = 0;
// Returns the estimated number of kilobytes that would be freed if this
// LifecycleUnit was discarded.
//
......
......@@ -45,6 +45,7 @@ class DummyLifecycleUnit : public LifecycleUnitBase {
std::string GetIconURL() const override { return std::string(); }
SortKey GetSortKey() const override { return SortKey(); }
State GetState() const override { return State::LOADED; }
bool Freeze() override { return false; }
int GetEstimatedMemoryFreedOnDiscardKB() const override { return 0; }
bool CanDiscard(DiscardReason reason) const override { return false; }
bool Discard(DiscardReason discard_reason) override { return false; }
......
......@@ -99,6 +99,16 @@ LifecycleUnit::SortKey TabLifecycleUnitSource::TabLifecycleUnit::GetSortKey()
return SortKey(last_focused_time_);
}
bool TabLifecycleUnitSource::TabLifecycleUnit::Freeze() {
// Can't freeze tabs that are already discarded or frozen.
// TODO(fmeawad): Don't freeze already frozen tabs.
if (GetState() != State::LOADED)
return false;
GetWebContents()->FreezePage();
return true;
}
int TabLifecycleUnitSource::TabLifecycleUnit::
GetEstimatedMemoryFreedOnDiscardKB() const {
// TODO(fdoray): Implement this. https://crbug.com/775644
......@@ -297,6 +307,10 @@ bool TabLifecycleUnitSource::TabLifecycleUnit::DiscardTab() {
return Discard(DiscardReason::kExternal);
}
bool TabLifecycleUnitSource::TabLifecycleUnit::FreezeTab() {
return Freeze();
}
bool TabLifecycleUnitSource::TabLifecycleUnit::IsDiscarded() const {
return GetState() == State::DISCARDED;
}
......
......@@ -75,6 +75,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit
base::string16 GetTitle() const override;
std::string GetIconURL() const override;
SortKey GetSortKey() const override;
bool Freeze() override;
int GetEstimatedMemoryFreedOnDiscardKB() const override;
bool CanDiscard(DiscardReason reason) const override;
bool Discard(DiscardReason discard_reason) override;
......@@ -84,6 +85,7 @@ class TabLifecycleUnitSource::TabLifecycleUnit
bool IsMediaTab() const override;
bool IsAutoDiscardable() const override;
void SetAutoDiscardable(bool auto_discardable) override;
bool FreezeTab() override;
bool DiscardTab() override;
bool IsDiscarded() const override;
int GetDiscardCount() const override;
......
......@@ -35,6 +35,9 @@ class TabLifecycleUnitExternal {
// Allows/disallows this tab to be automatically discarded.
virtual void SetAutoDiscardable(bool auto_discardable) = 0;
// Freezes the tab.
virtual bool FreezeTab() = 0;
// Discards the tab.
virtual bool DiscardTab() = 0;
......
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