139 lines
4.1 KiB
C#
139 lines
4.1 KiB
C#
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
// File: EventStorage.cs
|
||
|
//
|
||
|
// Note:
|
||
|
//
|
||
|
|
||
|
using System;
|
||
|
using System.Threading;
|
||
|
using System.Runtime.CompilerServices;
|
||
|
|
||
|
using Microsoft.Singularity;
|
||
|
using Microsoft.Singularity.V1.Services;
|
||
|
|
||
|
namespace Microsoft.Singularity.Eventing
|
||
|
{
|
||
|
[CLSCompliant(false)]
|
||
|
[AccessedByRuntime("output to header : defined in MemoryStorage.cpp")]
|
||
|
public struct QualityOfService {
|
||
|
|
||
|
// Maximum size of the user part of the events
|
||
|
public uint EventMaximumSize;
|
||
|
|
||
|
// Number of events reserved. 0 means no reservation
|
||
|
public uint ReservedEvents;
|
||
|
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint PermanentEvents = 1;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint RecyclableEvents = 2;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint ActiveEvents = 3;
|
||
|
|
||
|
// OOM settings
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint OOM_GeneralFailure = 0x10;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint OOM_DropNewEvents = 0x20;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint OOM_BreakOnRecycle = 0x40;
|
||
|
|
||
|
public uint StorageSettings;
|
||
|
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint ScopeUndefined = 0;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint ScopeGlobal = 1;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint ScopeLocal = 2;
|
||
|
|
||
|
public uint StorageScope;
|
||
|
}
|
||
|
|
||
|
[CLSCompliant(false)]
|
||
|
[AccessedByRuntime("output to header : defined in MemoryStorage.cpp")]
|
||
|
public abstract class EventingStorage {
|
||
|
|
||
|
public UIntPtr StorageHandle;
|
||
|
public QualityOfService QoS;
|
||
|
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint EVENTING_STORAGE_FLAGS_ENABLED = 0x10000;
|
||
|
[AccessedByRuntime("referenced in c++")]
|
||
|
public const uint EVENTING_STORAGE_FLAGS_STACKTRACES = 2;
|
||
|
|
||
|
public static EventingStorage CreateStorageFromHandle(UIntPtr handle) {
|
||
|
|
||
|
MemoryStorage storage = new MemoryStorage();
|
||
|
|
||
|
if (storage != null) {
|
||
|
|
||
|
storage.QoS.StorageSettings = QualityOfService.PermanentEvents;
|
||
|
storage.StorageHandle = handle;
|
||
|
|
||
|
storage.InitializeFromExistingHandle();
|
||
|
}
|
||
|
|
||
|
return storage;
|
||
|
}
|
||
|
|
||
|
|
||
|
public static EventingStorage CreateLocalStorage(uint Flags, uint TotalSize) {
|
||
|
|
||
|
MemoryStorage Storage = new MemoryStorage();
|
||
|
|
||
|
if (Storage != null) {
|
||
|
|
||
|
Storage.QoS.StorageSettings = Flags;
|
||
|
|
||
|
Storage.Initialize(TotalSize);
|
||
|
}
|
||
|
|
||
|
return Storage;
|
||
|
}
|
||
|
|
||
|
public static EventingStorage OpenGlobalStorage(UIntPtr storageHandle) {
|
||
|
|
||
|
return Controller.GetSystemController().OpenStorage(storageHandle);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
[Inline]
|
||
|
[NoHeapAllocation]
|
||
|
public UIntPtr GetHandle(){
|
||
|
|
||
|
return StorageHandle;
|
||
|
}
|
||
|
|
||
|
[NoHeapAllocation]
|
||
|
public virtual bool CheckCompatible(QualityOfService qoS) {
|
||
|
|
||
|
return (QoS.StorageSettings == qoS.StorageSettings) &&
|
||
|
(QoS.StorageScope == qoS.StorageScope);
|
||
|
}
|
||
|
|
||
|
public virtual bool AddBuffer(ulong Size)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public virtual Controller GetController()
|
||
|
{
|
||
|
return Controller.GetLocalController();
|
||
|
}
|
||
|
|
||
|
[NoHeapAllocation]
|
||
|
public abstract unsafe UIntPtr CreateQueryView(bool forward);
|
||
|
|
||
|
[NoHeapAllocation]
|
||
|
public abstract unsafe void DeleteQueryView(UIntPtr queryHandle);
|
||
|
|
||
|
public abstract UIntPtr GetNextEntry(UIntPtr queryHandle,
|
||
|
ref QueryBuffer entryBuffer);
|
||
|
}
|
||
|
}
|