• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

DemoBytom / DemoEngine / 24746555599

21 Apr 2026 09:07PM UTC coverage: 30.388% (-0.2%) from 30.6%
24746555599

push

coveralls.net

DemoBytom
WIP new WindowsMessagePump

1283 of 4222 relevant lines covered (30.39%)

0.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Demo.Engine.Core/Features/StaThread/StaThreadWriter.cs
1
// Copyright © Michał Dembski and contributors.
2
// Distributed under MIT license. See LICENSE file in the root for more information.
3

4
using System.Threading.Channels;
5
using Demo.Engine.Core.Interfaces.Platform;
6
using Demo.Engine.Core.Interfaces.Rendering;
7
using Demo.Engine.Core.ValueObjects;
8
using Microsoft.Extensions.ObjectPool;
9

10
namespace Demo.Engine.Core.Features.StaThread;
11

12
internal sealed class StaThreadWriter(
×
13
    ChannelWriter<StaThreadRequests> channelWriter,
×
14
    ObjectPool<StaThreadRequests.DoEventsOkRequest> doEventsOkPool)
×
15
    : IStaThreadWriter,
16
      IDisposable
17
{
18
    private readonly ChannelWriter<StaThreadRequests> _channelWriter = channelWriter;
×
19
    private readonly ObjectPool<StaThreadRequests.DoEventsOkRequest> _doEventsOkPool = doEventsOkPool;
×
20
    private bool _disposedValue;
21

22
    public async Task<RenderingSurfaceId> CreateSurface(
23
        IRenderingEngine renderingEngine,
24
        CancellationToken cancellationToken = default)
25
    {
26
        var createSurfaceRequest = StaThreadRequests.CreateSurface(renderingEngine);
×
27
        await _channelWriter.WriteAsync(
×
28
                createSurfaceRequest,
×
29
                cancellationToken);
×
30

31
        return await createSurfaceRequest.Invoked;
×
32
    }
×
33

34
    public async ValueTask<bool> DoEventsOk(
35
        IRenderingEngine renderingEngine,
36
        IOSMessageHandler osMessageHandler,
37
        RenderingSurfaceId renderingSurfaceId,
38
        CancellationToken cancellationToken = default)
39
    {
40
        var request = _doEventsOkPool.Get();
×
41

42
        try
43
        {
44
            request.Reset(renderingEngine, osMessageHandler, renderingSurfaceId, blockingCall: false, cancellationToken);
×
45

46
            await _channelWriter.WriteAsync(
×
47
                request,
×
48
                cancellationToken);
×
49

50
            return await request.Invoked;
×
51
        }
52
        finally
53
        {
54
            _doEventsOkPool.Return(request);
×
55
        }
56
    }
×
57

58
    public async ValueTask<bool> BlockingDoEventsOk(
59
        IRenderingEngine renderingEngine,
60
        IOSMessageHandler osMessageHandler,
61
        RenderingSurfaceId renderingSurfaceId,
62
        CancellationToken cancellationToken = default)
63
    {
64
        var request = _doEventsOkPool.Get();
×
65

66
        try
67
        {
68
            request.Reset(renderingEngine, osMessageHandler, renderingSurfaceId, blockingCall: true, cancellationToken);
×
69

70
            await _channelWriter.WriteAsync(
×
71
                request,
×
72
                cancellationToken);
×
73

74
            return await request.Invoked;
×
75
        }
76
        finally
77
        {
78
            _doEventsOkPool.Return(request);
×
79
        }
80
    }
×
81

82
    private void Dispose(bool disposing)
83
    {
84
        if (!_disposedValue)
×
85
        {
86
            if (disposing)
×
87
            {
88
                _channelWriter.Complete();
×
89
            }
90

91
            _disposedValue = true;
×
92
        }
93
    }
×
94

95
    public void Dispose()
96
    {
97
        // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
98
        Dispose(disposing: true);
×
99
        GC.SuppressFinalize(this);
×
100
    }
×
101
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc