}
Message m = mBgHandler.obtainMessage(MSG_BRIGHTNESS_CHANGED,
userInitiated ? 1 : 0, 0 /*unused*/, new BrightnessChangeValues(brightness,
- powerBrightnessFactor, isUserSetBrightness, isDefaultBrightnessConfig));
+ powerBrightnessFactor, isUserSetBrightness, isDefaultBrightnessConfig,
+ mInjector.currentTimeMillis()));
m.sendToTarget();
}
private void handleBrightnessChanged(float brightness, boolean userInitiated,
float powerBrightnessFactor, boolean isUserSetBrightness,
- boolean isDefaultBrightnessConfig) {
+ boolean isDefaultBrightnessConfig, long timestamp) {
BrightnessChangeEvent.Builder builder;
synchronized (mDataCollectionLock) {
builder = new BrightnessChangeEvent.Builder();
builder.setBrightness(brightness);
- builder.setTimeStamp(mInjector.currentTimeMillis());
+ builder.setTimeStamp(timestamp);
builder.setPowerBrightnessFactor(powerBrightnessFactor);
builder.setUserBrightnessPoint(isUserSetBrightness);
builder.setIsDefaultBrightnessConfig(isDefaultBrightnessConfig);
boolean userInitiatedChange = (msg.arg1 == 1);
handleBrightnessChanged(values.brightness, userInitiatedChange,
values.powerBrightnessFactor, values.isUserSetBrightness,
- values.isDefaultBrightnessConfig);
+ values.isDefaultBrightnessConfig, values.timestamp);
break;
case MSG_START_SENSOR_LISTENER:
startSensorListener();
final float powerBrightnessFactor;
final boolean isUserSetBrightness;
final boolean isDefaultBrightnessConfig;
+ final long timestamp;
BrightnessChangeValues(float brightness, float powerBrightnessFactor,
- boolean isUserSetBrightness, boolean isDefaultBrightnessConfig) {
+ boolean isUserSetBrightness, boolean isDefaultBrightnessConfig,
+ long timestamp) {
this.brightness = brightness;
this.powerBrightnessFactor = powerBrightnessFactor;
this.isUserSetBrightness = isUserSetBrightness;
this.isDefaultBrightnessConfig = isDefaultBrightnessConfig;
+ this.timestamp = timestamp;
}
}
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@SmallTest
final long secondSensorTime = mInjector.currentTimeMillis();
mInjector.incrementTime(TimeUnit.SECONDS.toMillis(3));
notifyBrightnessChanged(mTracker, brightness, true /*userInitiated*/,
- 0.5f /*powerPolicyDim(*/, true /*hasUserBrightnessPoints*/,
+ 0.5f /*powerBrightnessFactor*/, true /*hasUserBrightnessPoints*/,
false /*isDefaultBrightnessConfig*/);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
mTracker.writeEventsLocked(baos);
assertTrue(slice.getList().isEmpty());
}
+ @Test
+ public void testBackgroundHandlerDelay() {
+ final int brightness = 20;
+
+ // Setup tracker.
+ startTracker(mTracker);
+ mInjector.mSensorListener.onSensorChanged(createSensorEvent(1.0f));
+ mInjector.incrementTime(TimeUnit.SECONDS.toMillis(2));
+
+ // Block handler from running.
+ final CountDownLatch latch = new CountDownLatch(1);
+ mInjector.mHandler.post(
+ () -> {
+ try {
+ latch.await();
+ } catch (InterruptedException e) {
+ fail(e.getMessage());
+ }
+ });
+
+ // Send an event.
+ long eventTime = mInjector.currentTimeMillis();
+ mTracker.notifyBrightnessChanged(brightness, true /*userInitiated*/,
+ 1.0f /*powerBrightnessFactor*/, false /*isUserSetBrightness*/,
+ false /*isDefaultBrightnessConfig*/);
+
+ // Time passes before handler can run.
+ mInjector.incrementTime(TimeUnit.SECONDS.toMillis(2));
+
+ // Let the handler run.
+ latch.countDown();
+ mInjector.waitForHandler();
+
+ List<BrightnessChangeEvent> events = mTracker.getEvents(0, true).getList();
+ mTracker.stop();
+
+ // Check event was recorded with time it was sent rather than handler ran.
+ assertEquals(1, events.size());
+ BrightnessChangeEvent event = events.get(0);
+ assertEquals(eventTime, event.timeStamp);
+ }
+
private InputStream getInputStream(String data) {
return new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
}