Commit 2c7b080d authored by Theresa's avatar Theresa Committed by Commit Bot

[Feed] Trim stream under memory pressure

Register a MemoryPressureListener and trim the Stream memory when a
memory pressure signal is received.

BUG=860049

Change-Id: I60c7669649c1e085e0de7610fbf45b10ba327c53
Reviewed-on: https://chromium-review.googlesource.com/1178894
Commit-Queue: Theresa <twellington@chromium.org>
Reviewed-by: default avatarBecky Zhou <huayinz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584115}
parent f4b33f38
......@@ -10,6 +10,8 @@ import com.google.android.libraries.feed.api.stream.ContentChangedListener;
import com.google.android.libraries.feed.api.stream.ScrollListener;
import com.google.android.libraries.feed.api.stream.Stream;
import org.chromium.base.MemoryPressureListener;
import org.chromium.base.memory.MemoryPressureCallback;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.SnapScrollHelper;
......@@ -30,6 +32,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
private ScrollListener mStreamScrollListener;
private ContentChangedListener mStreamContentChangedListener;
private SectionHeader mSectionHeader;
private MemoryPressureCallback mMemoryPressureCallback;
private boolean mStreamContentChanged;
private int mThumbnailWidth;
......@@ -55,6 +58,7 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
stream.removeScrollListener(mStreamScrollListener);
stream.removeOnContentChangedListener(mStreamContentChangedListener);
mPrefChangeRegistrar.destroy();
MemoryPressureListener.removeCallback(mMemoryPressureCallback);
}
/**
......@@ -92,6 +96,9 @@ class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
this::onSectionHeaderToggled);
mCoordinator.getSectionHeaderView().setHeader(mSectionHeader);
stream.setStreamContentVisibility(mSectionHeader.isExpanded());
mMemoryPressureCallback = pressure -> mCoordinator.getStream().trim();
MemoryPressureListener.addCallback(mMemoryPressureCallback);
}
/** Update whether the section header should be expanded. */
......
......@@ -11,6 +11,7 @@ import static android.support.test.espresso.matcher.ViewMatchers.withId;
import android.app.Activity;
import android.app.Instrumentation;
import android.app.Instrumentation.ActivityMonitor;
import android.content.ComponentCallbacks2;
import android.graphics.Canvas;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest;
......@@ -28,7 +29,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.MemoryPressureListener;
import org.chromium.base.ThreadUtils;
import org.chromium.base.memory.MemoryPressureCallback;
import org.chromium.base.test.params.ParameterAnnotations;
import org.chromium.base.test.params.ParameterProvider;
import org.chromium.base.test.params.ParameterSet;
......@@ -737,6 +740,27 @@ public class NewTabPageTest {
mRenderTestRule.render(view, "expandable_header_collapsed");
}
@Test
@SmallTest
@Feature({"NewTabPage", "FeedNewTabPage"})
@ParameterAnnotations.UseMethodParameter(InterestFeedParams.class)
public void testMemoryPressure(boolean interestFeedEnabled) throws Exception {
// TODO(twellington): This test currently just checks that sending a memory pressure
// signal doesn't crash. Enhance the test to also check whether certain behaviors are
// performed.
CallbackHelper callback = new CallbackHelper();
MemoryPressureCallback pressureCallback = pressure -> callback.notifyCalled();
ThreadUtils.runOnUiThreadBlocking(() -> {
MemoryPressureListener.addCallback(pressureCallback);
mActivityTestRule.getActivity().getApplication().onTrimMemory(
ComponentCallbacks2.TRIM_MEMORY_MODERATE);
});
callback.waitForCallback(0);
ThreadUtils.runOnUiThreadBlocking(
() -> MemoryPressureListener.removeCallback(pressureCallback));
}
private void assertThumbnailInvalidAndRecapture() {
Assert.assertTrue(mNtp.shouldCaptureThumbnail());
captureThumbnail();
......
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