Browse Source

Properly rethrow RegisterTick errors instead of returning generic E_FAIL (#14938)

pull/15109/head
Max Katz 2 years ago
committed by GitHub
parent
commit
e3e42b2c15
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      native/Avalonia.Native/src/OSX/PlatformRenderTimer.mm
  2. 8
      src/Avalonia.Native/AvaloniaNativeRenderTimer.cs
  3. 2
      src/Avalonia.Native/avn.idl

6
native/Avalonia.Native/src/OSX/PlatformRenderTimer.mm

@ -8,7 +8,7 @@ private:
public:
FORWARD_IUNKNOWN()
virtual HRESULT RegisterTick (
virtual int RegisterTick (
IAvnActionCallback* callback) override
{
START_COM_CALL;
@ -24,13 +24,13 @@ public:
auto result = CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);
if (result != 0)
{
return E_FAIL;
return result;
}
result = CVDisplayLinkSetOutputCallback(_displayLink, OnTick, this);
if (result != 0)
{
return E_FAIL;
return result;
}
}
return S_OK;

8
src/Avalonia.Native/AvaloniaNativeRenderTimer.cs

@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Avalonia.Native.Interop;
using Avalonia.Rendering;
#nullable enable
@ -29,7 +30,12 @@ internal sealed class AvaloniaNativeRenderTimer : NativeCallbackBase, IRenderTim
if (!registered)
{
registered = true;
_platformRenderTimer.RegisterTick(this);
var registrationResult = _platformRenderTimer.RegisterTick(this);
if (registrationResult != 0)
{
throw new InvalidOperationException(
$"Avalonia.Native was not able to start the RenderTimer. Native error code is: {registrationResult}");
}
}
if (_subscriberCount++ == 0)

2
src/Avalonia.Native/avn.idl

@ -1202,7 +1202,7 @@ interface IAvnPlatformBehaviorInhibition : IUnknown
[uuid(22edf20d-5803-2d3f-9247-b4842e5e9322)]
interface IAvnPlatformRenderTimer : IUnknown
{
HRESULT RegisterTick(IAvnActionCallback* callback);
int RegisterTick(IAvnActionCallback* callback);
void Start();
void Stop();
bool RunsInBackground();

Loading…
Cancel
Save