Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: base/android/junit/src/org/chromium/base/process_launcher/BindingManagerImplTest.java

Issue 2845243002: Moving BindingManager and ChildProcessConnection to base/.
Patch Set: Moving BindingManager and ChildProcessConnection to base/. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.base.process_launcher;
6 6
7 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL; 7 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL;
8 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW; 8 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW;
9 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE; 9 import static android.content.ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE;
10 10
11 import android.app.Activity; 11 import android.app.Activity;
12 import android.app.Application; 12 import android.app.Application;
13 import android.os.Handler;
13 import android.util.Pair; 14 import android.util.Pair;
14 15
15 import org.junit.After;
16 import org.junit.Assert; 16 import org.junit.Assert;
17 import org.junit.Before; 17 import org.junit.Before;
18 import org.junit.Test; 18 import org.junit.Test;
19 import org.junit.runner.RunWith; 19 import org.junit.runner.RunWith;
20 import org.robolectric.Robolectric; 20 import org.robolectric.Robolectric;
21 import org.robolectric.annotation.Config; 21 import org.robolectric.annotation.Config;
22 import org.robolectric.shadows.ShadowLooper; 22 import org.robolectric.shadows.ShadowLooper;
23 23
24 import org.chromium.base.process_launcher.ChildProcessCreationParams;
25 import org.chromium.base.test.util.Feature; 24 import org.chromium.base.test.util.Feature;
26 import org.chromium.testing.local.LocalRobolectricTestRunner; 25 import org.chromium.testing.local.LocalRobolectricTestRunner;
27 26
28 import java.util.ArrayList; 27 import java.util.ArrayList;
29 28
30 /** 29 /**
31 * Unit tests for BindingManagerImpl. The tests run agains mock ChildProcessConn ection 30 * Unit tests for BindingManagerImpl. The tests run agains mock ChildProcessConn ection
32 * implementation, thus testing only the BindingManagerImpl itself. 31 * implementation, thus testing only the BindingManagerImpl itself.
33 * 32 *
34 * Default property of being low-end device is overriden, so that both low-end a nd high-end policies 33 * Default property of being low-end device is overriden, so that both low-end a nd high-end policies
(...skipping 25 matching lines...) Expand all
60 59
61 private static class TestChildProcessConnection extends ManagedChildProcessC onnection { 60 private static class TestChildProcessConnection extends ManagedChildProcessC onnection {
62 private final int mPid; 61 private final int mPid;
63 private boolean mConnected; 62 private boolean mConnected;
64 63
65 /** 64 /**
66 * Creates a mock binding corresponding to real ManagedChildProcessConne ction after the 65 * Creates a mock binding corresponding to real ManagedChildProcessConne ction after the
67 * connection is established: with initial binding bound and no strong b inding. 66 * connection is established: with initial binding bound and no strong b inding.
68 */ 67 */
69 private TestChildProcessConnection(int pid) { 68 private TestChildProcessConnection(int pid) {
70 super(null /* context */, pid /* number */, true /* sandboxed */, 69 super(new Handler(), null /* context */, pid /* number */, true /* s andboxed */,
71 null /* deathCallback */, null /* serviceClassName */, 70 null /* deathCallback */, null /* serviceClassName */,
72 null /* childProcessCommonParameters */, 71 null /* childProcessCommonParameters */,
73 new ChildProcessCreationParams("org.chromium.test", 72 new ChildProcessCreationParams("org.chromium.test",
74 false /* isExternalService */, 0 /* libraryProcessTy pe */, 73 false /* isExternalService */, 0 /* libraryProcessTy pe */,
75 false /* bindToCallerCheck */)); 74 false /* bindToCallerCheck */));
76 mPid = pid; 75 mPid = pid;
77 } 76 }
78 77
79 @Override 78 @Override
80 public int getPid() { 79 public int getPid() {
(...skipping 24 matching lines...) Expand all
105 } 104 }
106 } 105 }
107 106
108 /** 107 /**
109 * Helper class that stores a manager along with its text label. This is use d for tests that 108 * Helper class that stores a manager along with its text label. This is use d for tests that
110 * iterate over all managers to indicate which manager was being tested when an assertion 109 * iterate over all managers to indicate which manager was being tested when an assertion
111 * failed. 110 * failed.
112 */ 111 */
113 private static class ManagerEntry { 112 private static class ManagerEntry {
114 BindingManagerImpl mManager; 113 BindingManagerImpl mManager;
115 String mLabel; // Name of the manager. 114 String mLabel; // Name of the manager.
116 115
117 ManagerEntry(BindingManagerImpl manager, String label) { 116 ManagerEntry(BindingManagerImpl manager, String label) {
118 mManager = manager; 117 mManager = manager;
119 mLabel = label; 118 mLabel = label;
120 } 119 }
121 120
122 String getErrorMessage() { 121 String getErrorMessage() {
123 return "Failed for the " + mLabel + " manager."; 122 return "Failed for the " + mLabel + " manager.";
124 } 123 }
125 } 124 }
126 125
127 Activity mActivity; 126 Activity mActivity;
128 127
129 // The managers are created in setUp() for convenience. 128 // The managers are created in setUp() for convenience.
130 BindingManagerImpl mLowEndManager; 129 BindingManagerImpl mLowEndManager;
131 BindingManagerImpl mHighEndManager; 130 BindingManagerImpl mHighEndManager;
132 BindingManagerImpl mModerateBindingManager; 131 BindingManagerImpl mModerateBindingManager;
133 ManagerEntry[] mAllManagers; 132 ManagerEntry[] mAllManagers;
134 133
135 @Before 134 @Before
136 public void setUp() { 135 public void setUp() {
137 // The tests run on only one thread. Pretend that is the launcher thread so LauncherThread
138 // asserts are not triggered.
139 LauncherThread.setCurrentThreadAsLauncherThread();
140
141 mActivity = Robolectric.buildActivity(Activity.class).setup().get(); 136 mActivity = Robolectric.buildActivity(Activity.class).setup().get();
142 137 Handler handler = new Handler();
143 mLowEndManager = 138 mLowEndManager = BindingManagerImpl.createBindingManagerForTesting(
144 BindingManagerImpl.createBindingManagerForTesting(true /* isLowE ndDevice */); 139 handler, true /* isLowEndDevice */);
145 mHighEndManager = 140 mHighEndManager = BindingManagerImpl.createBindingManagerForTesting(
146 BindingManagerImpl.createBindingManagerForTesting(false /* isLow EndDevice */); 141 handler, false /* isLowEndDevice */);
147 mModerateBindingManager = 142 mModerateBindingManager = BindingManagerImpl.createBindingManagerForTest ing(
148 BindingManagerImpl.createBindingManagerForTesting(false /* isLow EndDevice */); 143 handler, false /* isLowEndDevice */);
149 mModerateBindingManager.startModerateBindingManagement(mActivity, 4 /* m axSize */); 144 mModerateBindingManager.startModerateBindingManagement(mActivity, 4 /* m axSize */);
150 mAllManagers = new ManagerEntry[] { 145 mAllManagers = new ManagerEntry[] {new ManagerEntry(mLowEndManager, "low -end"),
151 new ManagerEntry(mLowEndManager, "low-end"),
152 new ManagerEntry(mHighEndManager, "high-end"), 146 new ManagerEntry(mHighEndManager, "high-end"),
153 new ManagerEntry(mModerateBindingManager, "moderate-binding")}; 147 new ManagerEntry(mModerateBindingManager, "moderate-binding")};
154 } 148 }
155 149
156 @After
157 public void tearDown() {
158 LauncherThread.setLauncherThreadAsLauncherThread();
159 }
160
161 /** 150 /**
162 * Verifies that when running on low-end, the binding manager drops the oom bindings for the 151 * Verifies that when running on low-end, the binding manager drops the oom bindings for the
163 * previously bound connection when a new connection is used in foreground. 152 * previously bound connection when a new connection is used in foreground.
164 */ 153 */
165 @Test 154 @Test
166 @Feature({"ProcessManagement"}) 155 @Feature({"ProcessManagement"})
167 public void testNewConnectionDropsPreviousOnLowEnd() { 156 public void testNewConnectionDropsPreviousOnLowEnd() {
168 // This test applies only to the low-end manager. 157 // This test applies only to the low-end manager.
169 BindingManagerImpl manager = mLowEndManager; 158 BindingManagerImpl manager = mLowEndManager;
170 159
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 } 596 }
608 } 597 }
609 598
610 /* 599 /*
611 * Test that a moderate binding is added to background renderer processes wh en the initial 600 * Test that a moderate binding is added to background renderer processes wh en the initial
612 * binding is removed. 601 * binding is removed.
613 */ 602 */
614 @Test 603 @Test
615 @Feature({"ProcessManagement"}) 604 @Feature({"ProcessManagement"})
616 public void testModerateBindingTillBackgroundedBackgroundProcess() { 605 public void testModerateBindingTillBackgroundedBackgroundProcess() {
617 BindingManagerImpl manager = BindingManagerImpl.createBindingManagerForT esting(false); 606 BindingManagerImpl manager =
607 BindingManagerImpl.createBindingManagerForTesting(new Handler(), false);
618 manager.startModerateBindingManagement(mActivity, 4); 608 manager.startModerateBindingManagement(mActivity, 4);
619 609
620 TestChildProcessConnection connection = new TestChildProcessConnection(0 ); 610 TestChildProcessConnection connection = new TestChildProcessConnection(0 );
621 connection.start(null /* startCallback */); 611 connection.start(null /* startCallback */);
622 manager.addNewConnection(connection.getPid(), connection); 612 manager.addNewConnection(connection.getPid(), connection);
623 Assert.assertTrue(connection.isInitialBindingBound()); 613 Assert.assertTrue(connection.isInitialBindingBound());
624 Assert.assertFalse(connection.isModerateBindingBound()); 614 Assert.assertFalse(connection.isModerateBindingBound());
625 615
626 manager.setInForeground(connection.getPid(), false); 616 manager.setInForeground(connection.getPid(), false);
627 manager.onDeterminedVisibility(connection.getPid()); 617 manager.onDeterminedVisibility(connection.getPid());
628 Assert.assertFalse(connection.isInitialBindingBound()); 618 Assert.assertFalse(connection.isInitialBindingBound());
629 Assert.assertTrue(connection.isModerateBindingBound()); 619 Assert.assertTrue(connection.isModerateBindingBound());
630 } 620 }
631 621
632 /* 622 /*
633 * Test that a moderate binding is not added to foreground renderer processe s when the initial 623 * Test that a moderate binding is not added to foreground renderer processe s when the initial
634 * binding is removed. 624 * binding is removed.
635 */ 625 */
636 @Test 626 @Test
637 @Feature({"ProcessManagement"}) 627 @Feature({"ProcessManagement"})
638 public void testModerateBindingTillBackgroundedForegroundProcess() { 628 public void testModerateBindingTillBackgroundedForegroundProcess() {
639 BindingManagerImpl manager = BindingManagerImpl.createBindingManagerForT esting(false); 629 BindingManagerImpl manager =
630 BindingManagerImpl.createBindingManagerForTesting(new Handler(), false);
640 manager.startModerateBindingManagement(mActivity, 4); 631 manager.startModerateBindingManagement(mActivity, 4);
641 632
642 TestChildProcessConnection connection = new TestChildProcessConnection(0 ); 633 TestChildProcessConnection connection = new TestChildProcessConnection(0 );
643 connection.start(null /* startCallback */); 634 connection.start(null /* startCallback */);
644 manager.addNewConnection(connection.getPid(), connection); 635 manager.addNewConnection(connection.getPid(), connection);
645 Assert.assertTrue(connection.isInitialBindingBound()); 636 Assert.assertTrue(connection.isInitialBindingBound());
646 Assert.assertFalse(connection.isStrongBindingBound()); 637 Assert.assertFalse(connection.isStrongBindingBound());
647 Assert.assertFalse(connection.isModerateBindingBound()); 638 Assert.assertFalse(connection.isModerateBindingBound());
648 639
649 manager.setInForeground(connection.getPid(), true); 640 manager.setInForeground(connection.getPid(), true);
650 manager.onDeterminedVisibility(connection.getPid()); 641 manager.onDeterminedVisibility(connection.getPid());
651 Assert.assertFalse(connection.isInitialBindingBound()); 642 Assert.assertFalse(connection.isInitialBindingBound());
652 Assert.assertTrue(connection.isStrongBindingBound()); 643 Assert.assertTrue(connection.isStrongBindingBound());
653 Assert.assertFalse(connection.isModerateBindingBound()); 644 Assert.assertFalse(connection.isModerateBindingBound());
654 } 645 }
655 646
656 /* 647 /*
657 * Test that Chrome is sent to the background, that the initially added mode rate bindings are 648 * Test that Chrome is sent to the background, that the initially added mode rate bindings are
658 * removed and are not re-added when Chrome is brought back to the foregroun d. 649 * removed and are not re-added when Chrome is brought back to the foregroun d.
659 */ 650 */
660 @Test 651 @Test
661 @Feature({"ProcessManagement"}) 652 @Feature({"ProcessManagement"})
662 public void testModerateBindingTillBackgroundedSentToBackground() { 653 public void testModerateBindingTillBackgroundedSentToBackground() {
663 BindingManagerImpl manager = BindingManagerImpl.createBindingManagerForT esting(false); 654 BindingManagerImpl manager =
655 BindingManagerImpl.createBindingManagerForTesting(new Handler(), false);
664 manager.startModerateBindingManagement(mActivity, 4); 656 manager.startModerateBindingManagement(mActivity, 4);
665 657
666 TestChildProcessConnection connection = new TestChildProcessConnection(0 ); 658 TestChildProcessConnection connection = new TestChildProcessConnection(0 );
667 connection.start(null /* startCallback */); 659 connection.start(null /* startCallback */);
668 manager.addNewConnection(connection.getPid(), connection); 660 manager.addNewConnection(connection.getPid(), connection);
669 manager.setInForeground(connection.getPid(), false); 661 manager.setInForeground(connection.getPid(), false);
670 manager.onDeterminedVisibility(connection.getPid()); 662 manager.onDeterminedVisibility(connection.getPid());
671 Assert.assertTrue(connection.isModerateBindingBound()); 663 Assert.assertTrue(connection.isModerateBindingBound());
672 664
673 manager.onSentToBackground(); 665 manager.onSentToBackground();
674 ShadowLooper.runUiThreadTasksIncludingDelayedTasks(); 666 ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
675 Assert.assertFalse(connection.isModerateBindingBound()); 667 Assert.assertFalse(connection.isModerateBindingBound());
676 668
677 // Bringing Chrome to the foreground should not re-add the moderate bind ings. 669 // Bringing Chrome to the foreground should not re-add the moderate bind ings.
678 manager.onBroughtToForeground(); 670 manager.onBroughtToForeground();
679 Assert.assertFalse(connection.isModerateBindingBound()); 671 Assert.assertFalse(connection.isModerateBindingBound());
680 } 672 }
681 } 673 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698