Shrink FrameType to be an Int16, as Int32 is completely unnecessary, and that memory space is about to become useful

This commit is contained in:
Steve Sanderson 2019-07-15 12:32:59 +01:00
parent ba15186bbe
commit 20115f3c84
9 changed files with 12 additions and 8 deletions

View File

@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
namespace Microsoft.AspNetCore.Components.RenderTree

View File

@ -24,8 +24,8 @@ namespace Microsoft.AspNetCore.Components.RenderTree
// Offset Type
// ------ ----
// 0-3 Int32 (sequence number)
// 4-7 Int32 (frame type)
// 8-15 Value types (usage varies by frame type)
// 4-5 Int16 (frame type)
// 6-15 Value types (usage varies by frame type)
// 16-23 Reference type (usage varies by frame type)
// 24-31 Reference type (usage varies by frame type)
// 32-39 Reference type (usage varies by frame type)

View File

@ -6,7 +6,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree
/// <summary>
/// Describes the type of a <see cref="RenderTreeFrame"/>.
/// </summary>
public enum RenderTreeFrameType: int
public enum RenderTreeFrameType: short
{
/// <summary>
/// Used only for unintialized frames.

View File

@ -313,7 +313,7 @@ namespace Microsoft.AspNetCore.Components.Server
{
// Assume enums are represented as ints
var expectedEntry = expectedEntryIterationVar.GetType().IsEnum
? (int)expectedEntryIterationVar
? Convert.ToInt32(expectedEntryIterationVar)
: expectedEntryIterationVar;
if (expectedEntry is int expectedInt)

File diff suppressed because one or more lines are too long

View File

@ -114,6 +114,10 @@ export const monoPlatform: Platform = {
return (referenceTypedObject as any as number + 8) as any as Pointer;
},
readInt16Field: function readHeapInt16(baseAddress: Pointer, fieldOffset?: number): number {
return Module.getValue((baseAddress as any as number) + (fieldOffset || 0), 'i16');
},
readInt32Field: function readHeapInt32(baseAddress: Pointer, fieldOffset?: number): number {
return Module.getValue((baseAddress as any as number) + (fieldOffset || 0), 'i32');
},

View File

@ -14,6 +14,7 @@ export interface Platform {
getArrayEntryPtr<TPtr extends Pointer>(array: System_Array<TPtr>, index: number, itemSize: number): TPtr;
getObjectFieldsBaseAddress(referenceTypedObject: System_Object): Pointer;
readInt16Field(baseAddress: Pointer, fieldOffset?: number): number;
readInt32Field(baseAddress: Pointer, fieldOffset?: number): number;
readFloatField(baseAddress: Pointer, fieldOffset?: number): number;
readObjectField<T extends System_Object>(baseAddress: Pointer, fieldOffset?: number): T;

View File

@ -99,7 +99,7 @@ const editReader = {
// Keep in sync with memory layout in RenderTreeFrame.cs
const frameReader = {
structLength: 36,
frameType: (frame: RenderTreeFrame) => platform.readInt32Field(frame as any, 4) as FrameType,
frameType: (frame: RenderTreeFrame) => platform.readInt16Field(frame as any, 4) as FrameType,
subtreeLength: (frame: RenderTreeFrame) => platform.readInt32Field(frame as any, 8),
elementReferenceCaptureId: (frame: RenderTreeFrame) => platform.readStringField(frame as any, 16),
componentId: (frame: RenderTreeFrame) => platform.readInt32Field(frame as any, 12),

View File

@ -272,7 +272,7 @@ namespace Ignitor
{
// Assume enums are represented as ints
var expectedEntry = expectedEntryIterationVar.GetType().IsEnum
? (int)expectedEntryIterationVar
? Convert.ToInt32(expectedEntryIterationVar)
: expectedEntryIterationVar;
if (expectedEntry is int expectedInt)