-
-
Notifications
You must be signed in to change notification settings - Fork 58
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
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 <bruno@brunogarcia.com>
Co-authored-by: Bruno Garcia <bruno@brunogarcia.com>
|
@sentry review |
| $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.
bruno-garcia
left a comment
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
EndOfFramebefore capturing a screenshot as the behaviour is unreliable otherwise. See Unity docs.Implementation
The
ScreenshotProcessoruses theSentryMonoBehaviourto start a coroutine that waits forEnd of Frameto capture the screenshot. The screenshot gets sent as an envelop with a single attachment as envelope item.