mirror of
https://github.com/ryujinx-mirror/ryujinx.git
synced 2025-03-13 02:39:39 -05:00

* perf: use ByteMemoryPool * feat: KPageTableBase/KPageTable new methods to read and write `ReadOnlySequence<byte>` * new: add IWritableBlock.Write(ulong, ReadOnlySequence<byte>) with default impl * perf: use GetReadOnlySequence() instead of GetSpan() * perf: make `Parcel` IDisposable, use `ByteMemoryPool` for internal allocation, and make Parcel consumers dispose of it * remove comment about copySize * remove unnecessary Clear()
42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using Ryujinx.Common.Logging;
|
|
using Ryujinx.HLE.HOS.Kernel.Threading;
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|
{
|
|
interface IBinder
|
|
{
|
|
ResultCode AdjustRefcount(int addVal, int type);
|
|
|
|
void GetNativeHandle(uint typeId, out KReadableEvent readableEvent);
|
|
|
|
ResultCode OnTransact(uint code, uint flags, ReadOnlySpan<byte> inputParcel, Span<byte> outputParcel)
|
|
{
|
|
using Parcel inputParcelReader = new(inputParcel);
|
|
|
|
// TODO: support objects?
|
|
using Parcel outputParcelWriter = new((uint)(outputParcel.Length - Unsafe.SizeOf<ParcelHeader>()), 0);
|
|
|
|
string inputInterfaceToken = inputParcelReader.ReadInterfaceToken();
|
|
|
|
if (!InterfaceToken.Equals(inputInterfaceToken))
|
|
{
|
|
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Invalid interface token {inputInterfaceToken} (expected: {InterfaceToken}");
|
|
|
|
return ResultCode.Success;
|
|
}
|
|
|
|
OnTransact(code, flags, inputParcelReader, outputParcelWriter);
|
|
|
|
outputParcelWriter.Finish().CopyTo(outputParcel);
|
|
|
|
return ResultCode.Success;
|
|
}
|
|
|
|
void OnTransact(uint code, uint flags, Parcel inputParcel, Parcel outputParcel);
|
|
|
|
string InterfaceToken { get; }
|
|
}
|
|
}
|