-
-
Notifications
You must be signed in to change notification settings - Fork 56
fix: Screenshot Capture #2240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
fix: Screenshot Capture #2240
Conversation
|
||
public void CaptureScreenshotForEvent(SentryUnityOptions options, SentryId eventId) | ||
{ | ||
StartCoroutine(CaptureScreenshot(options, eventId)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This method returns before the coroutine starts/ends, right? how do we know the screenshot will be taken before the event is created?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The ScreenshotProcessor
forwards the call to the SentryMonoBehaviour
that starts the coroutine for the current EndOfFrame.
276efc3
to
11548fe
Compare
CI is unhappy |
Co-authored-by: seer-by-sentry[bot] <157164994+seer-by-sentry[bot]@users.noreply.github.com>
Co-authored-by: Bruno Garcia <[email protected]>
Co-authored-by: Bruno Garcia <[email protected]>
@sentry review |
@@ -24,7 +24,7 @@ Write-Host "#####################################################" | |||
|
|||
$BuildDir = $(GetNewProjectBuildPath) | |||
$ApkFileName = "test.apk" | |||
$ProcessName = "com.DefaultCompany.$(GetNewProjectName)" | |||
$ProcessName = "io.sentry.unity.integrationtest" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With Unity 6 integration tests seem to fail to have their proper identifier set, causing the build to fail. We're setting this now explicitly in the Builder.cs
and making use of the hardcoded name here.
internal virtual byte[] CaptureScreenshot(SentryUnityOptions options) | ||
=> SentryScreenshot.Capture(options); | ||
|
||
internal virtual void CaptureAttachment(SentryId eventId, SentryAttachment attachment) | ||
=> (Sentry.SentrySdk.CurrentHub as Hub)?.CaptureAttachment(eventId, attachment); | ||
|
||
internal virtual YieldInstruction WaitForEndOfFrame() | ||
=> new WaitForEndOfFrame(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm making these virtual so I can create a TestScreenshotEventProcessor
that overwrites these for testing purposes.
|
||
// This is a workaround for build issues with Unity 2022.3. and newer. | ||
// https://discussions.unity.com/t/gradle-build-issues-for-android-api-sdk-35-in-unity-2022-3lts/1502187/10 | ||
#if UNITY_2022_3_OR_NEWER | ||
Debug.Log("Builder: Setting Android target API level to 33"); | ||
PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel33; | ||
#endif | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Workaround that is no longer needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Fixes #2224, #1827 🎉
Relies on the .NET SDK getsentry/sentry-dotnet#4357
Context
The SDK has to wait for
EndOfFrame
before capturing a screenshot as the behaviour is unreliable otherwise. See Unity docs.Implementation
The
ScreenshotProcessor
uses theSentryMonoBehaviour
to start a coroutine that waits forEnd of Frame
to capture the screenshot. The screenshot gets sent as an envelop with a single attachment as envelope item.