Skip to content

Commit

Permalink
[LongScreenshots] Changed the tests to work with latest changes.
Browse files Browse the repository at this point in the history
Changed the tests based on the restructuring of the capturing and
compositing logic.



Bug: 1153969
Change-Id: I0b464be3d5d7bf9a0b453ee76c278676523ec17f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2716203
Commit-Queue: Tanya Gupta <tgupta@chromium.org>
Reviewed-by: Travis Skare <skare@chromium.org>
Cr-Commit-Position: refs/heads/master@{#857821}
  • Loading branch information
Tanya Gupta authored and Chromium LUCI CQ committed Feb 25, 2021
1 parent fd88e5e commit 8b5f9a5
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 147 deletions.
Expand Up @@ -35,7 +35,7 @@ public class BitmapGenerator implements LongScreenshotsTabService.CaptureProcess

private static final String DIR_NAME = "long_screenshots_dir";

private GeneratorCallBack mGeneratorCallBack;
protected GeneratorCallBack mGeneratorCallBack;

/**
* Users of the {@link LongScreenshotsEntry} class have to implement and pass this interface in
Expand Down Expand Up @@ -140,7 +140,9 @@ public void destroy() {
mCompositor.destroy();
mCompositor = null;
}
mTabService.longScreenshotsClosed();
if (mTabService != null) {
mTabService.longScreenshotsClosed();
}
}

@VisibleForTesting
Expand Down
Expand Up @@ -44,8 +44,9 @@ public LongScreenshotsCompositor(GURL url,
String directoryKey, PaintPreviewProto response, Callback<Integer> compositorCallback) {
mCompositorCallback = compositorCallback;

mDelegate = new PlayerCompositorDelegateImpl(nativePaintPreviewServiceProvider, response,
url, directoryKey, true, this::onCompositorReady, this::onCompositorError);
mDelegate = getCompositorDelegateFactory().createForProto(nativePaintPreviewServiceProvider,
response, url, directoryKey, true, this::onCompositorReady,
this::onCompositorError);
}

/**
Expand Down
Expand Up @@ -112,8 +112,8 @@ public void generateBitmap() {
updateStatus(EntryStatus.GENERATION_ERROR);
return;
}
mGenerator.compositeBitmap(mRect, this::onBitmapGenerationError, this::onBitmapGenerated);
updateStatus(EntryStatus.BITMAP_GENERATION_IN_PROGRESS);
mGenerator.compositeBitmap(mRect, this::onBitmapGenerationError, this::onBitmapGenerated);
}

/**
Expand Down Expand Up @@ -178,7 +178,7 @@ private void onBitmapGenerationError() {
updateStatus(EntryStatus.GENERATION_ERROR);
}

protected void updateStatus(@EntryStatus int status) {
public void updateStatus(@EntryStatus int status) {
mCurrentStatus = status;
if (mEntryListener != null) {
mEntryListener.onResult(mCurrentStatus);
Expand Down
Expand Up @@ -6,8 +6,7 @@

import android.graphics.Bitmap;
import android.graphics.Rect;

import androidx.test.filters.MediumTest;
import android.support.test.filters.LargeTest;

import org.junit.After;
import org.junit.Assert;
Expand All @@ -17,11 +16,9 @@
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;

import org.chromium.base.Callback;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Criteria;
import org.chromium.base.test.util.CriteriaHelper;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.Matchers;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.paint_preview.PaintPreviewCompositorUtils;
import org.chromium.chrome.browser.tab.Tab;
Expand All @@ -45,49 +42,11 @@ public class BitmapGeneratorTest {

private Tab mTab;
private BitmapGenerator mGenerator;
private TestListener mTestListener;
private Bitmap mGeneratedBitmap;

class TestListener implements BitmapGenerator.GeneratorCallBack {
boolean mOnBitmapGeneratedCalled;
boolean mSomeCallBackCalled;
@CompositorStatus
int mCompositorErrorStatus;

@Status
int mCaptureStatus;

@Override
public void onCompositorError(@CompositorStatus int status) {
mCompositorErrorStatus = status;
mSomeCallBackCalled = true;
}

@Override
public void onBitmapGenerated(Bitmap bitmap) {
mOnBitmapGeneratedCalled = true;
mSomeCallBackCalled = true;
mGeneratedBitmap = bitmap;
}

@Override
public void onCaptureError(@Status int status) {
mSomeCallBackCalled = true;
mCaptureStatus = status;
}
}

@Before
public void setUp() throws Exception {
mActivityTestRule.startMainActivityOnBlankPage();
mTab = mActivityTestRule.getActivity().getActivityTab();
mTestListener = new TestListener();

TestThreadUtils.runOnUiThreadBlocking(() -> {
mGenerator = new BitmapGenerator(
mActivityTestRule.getActivity(), mTab, new Rect(0, 0, 100, 100), mTestListener);
PaintPreviewCompositorUtils.warmupCompositor();
});
}

@After
Expand All @@ -99,53 +58,48 @@ public void tearDown() throws Exception {
* Verifies that a Tab's contents are captured.
*/
@Test
@MediumTest
@LargeTest
@Feature({"LongScreenshots"})
public void testCaptured() throws Exception {
EmbeddedTestServer testServer = mActivityTestRule.getTestServer();
final String url = testServer.getURL("/chrome/test/data/android/about.html");

TestThreadUtils.runOnUiThreadBlocking(() -> {
mTab.loadUrl(new LoadUrlParams(url));
mGenerator.captureScreenshot();
});

CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat("OnBitmapGenerated callback was not called",
mTestListener.mOnBitmapGeneratedCalled, Matchers.is(true));
}, 10000L, 50L);

Assert.assertNotNull(mGeneratedBitmap);
}

/**
* Verifies that a Tab's contents are captured.
* TODO(tgupta): Figure out how to mimic a low memory situation.
public void testCapturedNewOne() throws Exception {
Runnable onErrorCallback = new Runnable() {
@Override
public void run() {
Assert.fail("Error should not be thrown");
}
};

Callback<Bitmap> onBitmapGenerated = new Callback<Bitmap>() {
@Override
public void onResult(Bitmap result) {
Assert.assertNotNull(result);
}
};

class Listener implements BitmapGenerator.GeneratorCallBack {
@Override
public void onCompositorResult(@CompositorStatus int status) {
Assert.assertEquals(CompositorStatus.OK, status);
TestThreadUtils.runOnUiThreadBlocking(() -> {
mGenerator.compositeBitmap(
new Rect(0, 0, 100, 100), onErrorCallback, onBitmapGenerated);
});
}

@Override
public void onCaptureResult(@Status int status) {
Assert.assertEquals(Status.OK, status);
}
}

@Test
@MediumTest
@Feature({"LongScreenshots"})
public void testCapturedLowMemory() throws Exception {
EmbeddedTestServer testServer = mActivityTestRule.getTestServer();
final String url = testServer.getURL("/chrome/test/data/android/about.html");

TestThreadUtils.runOnUiThreadBlocking(() -> {
mGenerator = new BitmapGenerator(mActivityTestRule.getActivity(), mTab,
new Rect(0, 0, 100, 100), new Listener());
PaintPreviewCompositorUtils.warmupCompositor();
mTab.loadUrl(new LoadUrlParams(url));
MemoryPressureListener.notifyMemoryPressure(MemoryPressureLevel.CRITICAL);
mGenerator.captureScreenshot();
mGenerator.captureTab();
});
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat("No callback on the listener was called.",
mTestListener.mSomeCallBackCalled, Matchers.is(true));
}, 10000L, 50L);
Assert.assertNull(mGeneratedBitmap);
Assert.assertEquals(Status.LOW_MEMORY_DETECTED,
mTestListener.mCaptureStatus);
Assert.assertEquals(CompositorStatus.SKIPPED_DUE_TO_MEMORY_PRESSURE,
mTestListener.mCompositorErrorStatus);
}
*/
}
Expand Up @@ -4,7 +4,6 @@

package org.chromium.chrome.browser.share.long_screenshots.bitmap_generation;

import static org.junit.Assert.assertEquals;

import android.graphics.Bitmap;
import android.graphics.Rect;
Expand All @@ -28,6 +27,7 @@
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.paint_preview.common.proto.PaintPreview.PaintPreviewProto;
import org.chromium.components.paintpreview.browser.NativePaintPreviewServiceProvider;
import org.chromium.components.paintpreview.player.CompositorStatus;
import org.chromium.components.paintpreview.player.PlayerCompositorDelegate;
import org.chromium.url.GURL;

Expand All @@ -41,6 +41,7 @@ public class LongScreenshotsCompositorTest {
private TestPlayerCompositorDelegate mCompositorDelegate;
private Bitmap mTestBitmap = Bitmap.createBitmap(512, 1024, Bitmap.Config.ARGB_8888);
private Rect mRect = new Rect(0, 100, 200, 1100);
private boolean mErrorThrown;

@Mock
private GURL mTestGurl;
Expand Down Expand Up @@ -76,6 +77,12 @@ public PlayerCompositorDelegate createForProto(NativePaintPreviewServiceProvider
* this into its own class when it starts to get used more.
*/
class TestPlayerCompositorDelegate implements PlayerCompositorDelegate {
private boolean mRequestBitmapError;

public void setRequestBitmapError() {
mRequestBitmapError = true;
}

@Override
public void addMemoryPressureListener(Runnable runnable) {}

Expand All @@ -89,9 +96,14 @@ public int requestBitmap(UnguessableToken frameGuid, Rect clipRect, float scaleF
@Override
public int requestBitmap(Rect clipRect, float scaleFactor, Callback<Bitmap> bitmapCallback,
Runnable errorCallback) {
assertEquals(mRect, clipRect);
assertEquals(1f, scaleFactor, 0);
bitmapCallback.onResult(mTestBitmap);
Assert.assertEquals(mRect, clipRect);
Assert.assertEquals(1f, scaleFactor, 0);

if (!mRequestBitmapError) {
bitmapCallback.onResult(mTestBitmap);
} else {
errorCallback.run();
}
return 1;
}

Expand All @@ -115,6 +127,7 @@ public void setUp() {
mCompositorDelegate = new TestPlayerCompositorDelegate();
LongScreenshotsCompositor.overrideCompositorDelegateFactoryForTesting(
new TestCompositorDelegateFactory());
mErrorThrown = false;
}

@After
Expand All @@ -127,24 +140,69 @@ public void testSuccessfullCompositing() {
Callback<Bitmap> onBitmapResult = new Callback<Bitmap>() {
@Override
public void onResult(Bitmap result) {
assertEquals(mTestBitmap, result);
Assert.assertEquals(mTestBitmap, result);
}
};

Callback<Integer> onErrorCallback = new Callback<Integer>() {
Callback<Integer> compositorCallback = new Callback<Integer>() {
@Override
public void onResult(Integer result) {
Assert.assertEquals((Integer) CompositorStatus.OK, result);
}
};

Runnable onErrorCallback = new Runnable() {
@Override
public void run() {
Assert.fail("Error should not be thrown");
}
};

LongScreenshotsCompositor compositor = new LongScreenshotsCompositor(mTestGurl,
mNativePaintPreviewServiceProvider, "test_directory_key",
PaintPreviewProto.getDefaultInstance(), mRect, onBitmapResult, onErrorCallback);
PaintPreviewProto.getDefaultInstance(), compositorCallback);

// Mimic the service calling onCompositorReady
compositor.onCompositorReady(null, null, null, null, null, null, null);

// RequestBitmap in mCompositorDelegate should match
compositor.requestBitmap(mRect, onErrorCallback, onBitmapResult);
}

@Test
public void testRequestBitmapFailture() {
mCompositorDelegate.setRequestBitmapError();
Callback<Bitmap> onBitmapResult = new Callback<Bitmap>() {
@Override
public void onResult(Bitmap result) {
Assert.fail("Bitmap should not be returned");
}
};

Callback<Integer> compositorCallback = new Callback<Integer>() {
@Override
public void onResult(Integer result) {
Assert.assertEquals((Integer) CompositorStatus.OK, result);
}
};

Runnable onErrorCallback = new Runnable() {
@Override
public void run() {
mErrorThrown = true;
}
};

LongScreenshotsCompositor compositor = new LongScreenshotsCompositor(mTestGurl,
mNativePaintPreviewServiceProvider, "test_directory_key",
PaintPreviewProto.getDefaultInstance(), compositorCallback);

// Mimic the service calling onCompositorReady
compositor.onCompositorReady(null, null, null, null, null, null, null);

// RequestBitmap in mCompositorDelegate should match
compositor.requestBitmap(mRect, onErrorCallback, onBitmapResult);

Assert.assertTrue(mErrorThrown);
}
}

0 comments on commit 8b5f9a5

Please sign in to comment.