Skip to content

Commit c21725e

Browse files
Merge pull request #601 from Instabug/feat/screen-render-local-store
Feat/screen render local store
2 parents 852884e + 4cdf341 commit c21725e

23 files changed

+1180
-654
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ android {
5252
}
5353

5454
dependencies {
55-
api 'com.instabug.library:instabug:15.0.0.6897042-SNAPSHOT'
55+
api 'com.instabug.library:instabug:15.0.0.6969715-SNAPSHOT'
5656
testImplementation 'junit:junit:4.13.2'
5757
testImplementation "org.mockito:mockito-inline:3.12.1"
5858
testImplementation "io.mockk:mockk:1.13.13"

android/src/main/java/com/instabug/flutter/modules/ApmApi.java

Lines changed: 145 additions & 94 deletions
Large diffs are not rendered by default.

android/src/test/java/com/instabug/flutter/ApmApiTest.java

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,11 +409,129 @@ public void testIsScreenRenderEnabled() {
409409
verify(result).success(expected);
410410
}
411411

412+
@Test
412413
public void testSetScreenRenderEnabled() {
413414
boolean isEnabled = false;
414415

415416
api.setScreenRenderEnabled(isEnabled);
416417

417418
mAPM.verify(() -> APM.setScreenRenderingEnabled(isEnabled));
418419
}
420+
421+
@Test
422+
public void testDeviceRefreshRate() throws Exception {
423+
float expectedRefreshRate = 60.0f;
424+
Double expectedResult = 60.0;
425+
ApmPigeon.Result<Double> result = spy(makeResult((actual) -> assertEquals(expectedResult, actual)));
426+
427+
// Mock the refresh rate provider to return the expected value
428+
Callable<Float> mockRefreshRateProvider = () -> expectedRefreshRate;
429+
ApmApi testApi = new ApmApi(mockRefreshRateProvider);
430+
431+
testApi.deviceRefreshRate(result);
432+
433+
verify(result).success(expectedResult);
434+
}
435+
436+
@Test
437+
public void testDeviceRefreshRateWithException() throws Exception {
438+
ApmPigeon.Result<Double> result = spy(makeResult((actual) -> {}));
439+
440+
// Mock the refresh rate provider to throw an exception
441+
Callable<Float> mockRefreshRateProvider = () -> {
442+
throw new RuntimeException("Test exception");
443+
};
444+
ApmApi testApi = new ApmApi(mockRefreshRateProvider);
445+
446+
testApi.deviceRefreshRate(result);
447+
448+
// Verify that the method doesn't crash when an exception occurs
449+
// The exception is caught and printed, but the result is not called
450+
verify(result, never()).success(any());
451+
}
452+
453+
@Test
454+
public void testEndScreenRenderForAutoUiTrace() {
455+
Map<String, Object> data = new HashMap<>();
456+
data.put("traceId", 123L);
457+
data.put("slowFramesTotalDuration", 1000L);
458+
data.put("frozenFramesTotalDuration", 2000L);
459+
data.put("endTime", 1234567890L);
460+
data.put("frameData", null);
461+
462+
api.endScreenRenderForAutoUiTrace(data);
463+
464+
mInternalApmStatic.verify(() -> InternalAPM._endAutoUiTraceWithScreenRendering(any(), eq(1234567890L)));
465+
mInternalApmStatic.verifyNoMoreInteractions();
466+
}
467+
468+
@Test
469+
public void testEndScreenRenderForAutoUiTraceWithFrameData() {
470+
Map<String, Object> data = new HashMap<>();
471+
data.put("traceId", 123L);
472+
data.put("slowFramesTotalDuration", 1000L);
473+
data.put("frozenFramesTotalDuration", 2000L);
474+
data.put("endTime", 1234567890L);
475+
476+
// Create frame data with ArrayList<ArrayList<Long>>
477+
java.util.ArrayList<java.util.ArrayList<Long>> frameData = new java.util.ArrayList<>();
478+
java.util.ArrayList<Long> frame1 = new java.util.ArrayList<>();
479+
frame1.add(100L);
480+
frame1.add(200L);
481+
frameData.add(frame1);
482+
483+
java.util.ArrayList<Long> frame2 = new java.util.ArrayList<>();
484+
frame2.add(300L);
485+
frame2.add(400L);
486+
frameData.add(frame2);
487+
488+
data.put("frameData", frameData);
489+
490+
api.endScreenRenderForAutoUiTrace(data);
491+
492+
mInternalApmStatic.verify(() -> InternalAPM._endAutoUiTraceWithScreenRendering(any(), eq(1234567890L)));
493+
mInternalApmStatic.verifyNoMoreInteractions();
494+
}
495+
496+
@Test
497+
public void testEndScreenRenderForCustomUiTrace() {
498+
Map<String, Object> data = new HashMap<>();
499+
data.put("traceId", 123L);
500+
data.put("slowFramesTotalDuration", 1000L);
501+
data.put("frozenFramesTotalDuration", 2000L);
502+
data.put("endTime", 1234567890L);
503+
data.put("frameData", null);
504+
505+
api.endScreenRenderForCustomUiTrace(data);
506+
507+
mInternalApmStatic.verify(() -> InternalAPM._endCustomUiTraceWithScreenRenderingCP(any()));
508+
mInternalApmStatic.verifyNoMoreInteractions();
509+
}
510+
511+
@Test
512+
public void testEndScreenRenderForCustomUiTraceWithFrameData() {
513+
Map<String, Object> data = new HashMap<>();
514+
data.put("traceId", 123L);
515+
data.put("slowFramesTotalDuration", 1000L);
516+
data.put("frozenFramesTotalDuration", 2000L);
517+
518+
// Create frame data with ArrayList<ArrayList<Long>>
519+
java.util.ArrayList<java.util.ArrayList<Long>> frameData = new java.util.ArrayList<>();
520+
java.util.ArrayList<Long> frame1 = new java.util.ArrayList<>();
521+
frame1.add(100L);
522+
frame1.add(200L);
523+
frameData.add(frame1);
524+
525+
java.util.ArrayList<Long> frame2 = new java.util.ArrayList<>();
526+
frame2.add(300L);
527+
frame2.add(400L);
528+
frameData.add(frame2);
529+
530+
data.put("frameData", frameData);
531+
532+
api.endScreenRenderForCustomUiTrace(data);
533+
534+
mInternalApmStatic.verify(() -> InternalAPM._endCustomUiTraceWithScreenRenderingCP(any()));
535+
mInternalApmStatic.verifyNoMoreInteractions();
536+
}
419537
}

0 commit comments

Comments
 (0)