Skip to content

Commit

Permalink
Consolidate and disambiguate version checking for load traces capabil…
Browse files Browse the repository at this point in the history
…ity detection
  • Loading branch information
bidetofevil committed Jan 21, 2025
1 parent a5e334e commit 9424bbd
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ fun createActivityLoadEventEmitter(
autoTraceEnabled = autoTraceEnabled,
clock = clock,
)
return if (versionChecker.isAtLeast(VERSION_CODES.Q)) {
return if (hasPrePostEvents(versionChecker)) {
ActivityLoadEventEmitter(lifecycleEventEmitter)
} else {
LegacyActivityLoadEventEmitter(lifecycleEventEmitter)
Expand All @@ -45,6 +45,16 @@ fun createActivityLoadEventEmitter(
*/
fun traceInstanceId(activity: Activity): Int = activity.hashCode()

/**
* Determine if the current instance of the app will fire render events
*/
fun hasRenderEvent(versionChecker: VersionChecker) = versionChecker.isAtLeast(VERSION_CODES.Q)

/**
* Determine if the current instance of the app will pre and post lifecycle events
*/
fun hasPrePostEvents(versionChecker: VersionChecker) = versionChecker.isAtLeast(VERSION_CODES.Q)

/**
* Implementation that works with Android 10+ APIs
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.embrace.android.embracesdk.internal.capture.activity

import android.app.Application.ActivityLifecycleCallbacks
import android.os.Build
import io.embrace.android.embracesdk.internal.arch.schema.EmbType
import io.embrace.android.embracesdk.internal.spans.PersistableEmbraceSpan
import io.embrace.android.embracesdk.internal.spans.SpanService
Expand Down Expand Up @@ -105,7 +104,7 @@ class UiLoadTraceEmitter(
instanceId = instanceId,
timestampMs = timestampMs,
)
} else if (hasRenderEvent()) {
} else if (hasRenderEvent(versionChecker)) {
startChildSpan(
instanceId = instanceId,
timestampMs = timestampMs,
Expand Down Expand Up @@ -222,7 +221,7 @@ class UiLoadTraceEmitter(
private fun determineEndEvent(manualEnd: Boolean): TraceCompleteTrigger {
return if (manualEnd) {
TraceCompleteTrigger.MANUAL
} else if (hasRenderEvent()) {
} else if (hasRenderEvent(versionChecker)) {
TraceCompleteTrigger.RENDER
} else {
TraceCompleteTrigger.RESUME
Expand Down Expand Up @@ -266,8 +265,6 @@ class UiLoadTraceEmitter(
private fun traceCompleteTrigger(instanceId: Int): TraceCompleteTrigger? =
activeTraces[instanceId]?.traceCompleteTrigger

private fun hasRenderEvent(): Boolean = versionChecker.isAtLeast(Build.VERSION_CODES.Q)

private fun traceName(
activityName: String,
uiLoadType: UiLoadType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ internal class AppStartupTraceEmitter(

private val startupRecorded = AtomicBoolean(false)
private val dataCollectionComplete = AtomicBoolean(false)
private val endWithFrameDraw: Boolean = versionChecker.isAtLeast(VERSION_CODES.Q)
private val endWithFrameDraw: Boolean = startupHasRenderEvent(versionChecker)

override fun applicationInitStart(timestampMs: Long?) {
applicationInitStartMs = timestampMs ?: nowMs()
Expand Down Expand Up @@ -218,7 +218,7 @@ internal class AppStartupTraceEmitter(
}

val traceEndTimeMs: Long? =
if (versionChecker.isAtLeast(VERSION_CODES.Q)) {
if (endWithFrameDraw) {
firstFrameRenderedMs
} else {
startupActivityResumedMs
Expand Down Expand Up @@ -472,5 +472,7 @@ internal class AppStartupTraceEmitter(
} else {
null
}

fun startupHasRenderEvent(versionChecker: VersionChecker) = versionChecker.isAtLeast(VERSION_CODES.Q)
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.embrace.android.embracesdk.internal.injection

import android.os.Build
import io.embrace.android.embracesdk.internal.Systrace
import io.embrace.android.embracesdk.internal.capture.activity.UiLoadDataListener
import io.embrace.android.embracesdk.internal.capture.activity.UiLoadTraceEmitter
import io.embrace.android.embracesdk.internal.capture.activity.createActivityLoadEventEmitter
import io.embrace.android.embracesdk.internal.capture.activity.hasRenderEvent
import io.embrace.android.embracesdk.internal.capture.crumbs.ActivityBreadcrumbTracker
import io.embrace.android.embracesdk.internal.capture.crumbs.PushNotificationCaptureService
import io.embrace.android.embracesdk.internal.capture.startup.AppStartupDataCollector
Expand Down Expand Up @@ -104,7 +104,7 @@ internal class DataCaptureServiceModuleImpl @JvmOverloads constructor(
}

private fun createFirstDrawDetector(versionChecker: VersionChecker, logger: EmbLogger) =
if (versionChecker.isAtLeast(Build.VERSION_CODES.Q)) {
if (hasRenderEvent(versionChecker)) {
FirstDrawDetector(logger)
} else {
null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ internal class UiLoadExtTest {
}
start()
resume()
if (BuildVersionChecker.isAtLeast(Build.VERSION_CODES.Q)) {
if (hasRenderEvent(BuildVersionChecker)) {
drawEventEmitter.draw(activityController.get()) {
clock.tick(RENDER_DURATION)
}
Expand Down
Loading

0 comments on commit 9424bbd

Please sign in to comment.