From f50fbe5d9fec00c0187b96c684824c10adf38795 Mon Sep 17 00:00:00 2001 From: Mateo Kuruk Miccino Date: Tue, 22 Nov 2022 09:58:36 -0300 Subject: [PATCH 1/3] feat: add `analyticsKernelService` `with renderer-protocol --- .../renderer-protocol/inverseRpc/rpcServer.ts | 2 + .../inverseRpc/services/analyticsService.ts | 52 +++++++++++++++++++ packages/unity-interface/BrowserInterface.ts | 5 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 packages/renderer-protocol/inverseRpc/services/analyticsService.ts diff --git a/packages/renderer-protocol/inverseRpc/rpcServer.ts b/packages/renderer-protocol/inverseRpc/rpcServer.ts index e2652b038..3f5c39810 100644 --- a/packages/renderer-protocol/inverseRpc/rpcServer.ts +++ b/packages/renderer-protocol/inverseRpc/rpcServer.ts @@ -1,6 +1,7 @@ import { createRpcServer, RpcServerPort, Transport } from '@dcl/rpc' import { RendererProtocolContext } from './context' import { registerEmotesKernelService } from './services/emotesService' +import { registerAnalyticsKernelService } from './services/analyticsService' export function createRendererProtocolInverseRpcServer(transport: Transport) { const server = createRpcServer({}) @@ -19,4 +20,5 @@ export function createRendererProtocolInverseRpcServer(transport: Transport) { */ async function registerKernelServices(serverPort: RpcServerPort) { registerEmotesKernelService(serverPort) + registerAnalyticsKernelService(serverPort) } diff --git a/packages/renderer-protocol/inverseRpc/services/analyticsService.ts b/packages/renderer-protocol/inverseRpc/services/analyticsService.ts new file mode 100644 index 000000000..8bfe2089c --- /dev/null +++ b/packages/renderer-protocol/inverseRpc/services/analyticsService.ts @@ -0,0 +1,52 @@ +import { RpcServerPort } from '@dcl/rpc' +import { RendererProtocolContext } from '../context' +import * as codegen from '@dcl/rpc/dist/codegen' +import { AnalyticsKernelServiceDefinition } from '@dcl/protocol/out-ts/decentraland/renderer/kernel_services/analytics.gen' +import { getPerformanceInfo } from '../../../shared/session/getPerformanceInfo' +import { getUnityInstance } from '../../../unity-interface/IUnityInterface' +import { trackEvent } from '../../../shared/analytics' +import { setDelightedSurveyEnabled } from '../../../unity-interface/delightedSurvey' +import { transformSerializeOpt } from '../../../unity-interface/transformSerializationOpt' +import { browserInterface } from '../../..//unity-interface/BrowserInterface' + +type UnityEvent = any + +export function registerAnalyticsKernelService(port: RpcServerPort) { + codegen.registerService(port, AnalyticsKernelServiceDefinition, async () => ({ + async analyticsEvent(req, _) { + const properties: Record = {} + if (req.properties) { + for (const property of req.properties) { + properties[property.key] = property.value + } + } + + trackEvent(req.eventName as UnityEvent, { context: properties.context || 'unity-event', ...properties }) + return {} + }, + async performanceReport(req, _) { + let estimatedAllocatedMemory = 0 + let estimatedTotalMemory = 0 + if (getUnityInstance()?.Module?.asmLibraryArg?._GetDynamicMemorySize) { + estimatedAllocatedMemory = getUnityInstance().Module.asmLibraryArg._GetDynamicMemorySize() + estimatedTotalMemory = getUnityInstance().Module.asmLibraryArg._GetTotalMemorySize() + } + const perfReport = getPerformanceInfo({ ...(req as any), estimatedAllocatedMemory, estimatedTotalMemory }) + trackEvent('performance report', perfReport) + return {} + }, + async setDelightedSurveyEnabled(req, _) { + setDelightedSurveyEnabled(req.enabled) + return {} + }, + async systemInfoReport(req, _) { + trackEvent('system info report', req) + + transformSerializeOpt.useBinaryTransform = !!req.useBinaryTransform + + // @deprecated + browserInterface.startedFuture.resolve() + return {} + } + })) +} diff --git a/packages/unity-interface/BrowserInterface.ts b/packages/unity-interface/BrowserInterface.ts index 3db4b9475..9764c956b 100644 --- a/packages/unity-interface/BrowserInterface.ts +++ b/packages/unity-interface/BrowserInterface.ts @@ -314,6 +314,7 @@ export class BrowserInterface { globalObservable.emit('openUrl', data) } + /** @deprecated */ public PerformanceReport(data: Record) { let estimatedAllocatedMemory = 0 let estimatedTotalMemory = 0 @@ -325,7 +326,7 @@ export class BrowserInterface { trackEvent('performance report', perfReport) } - // TODO: remove useBinaryTransform after SDK7 is fully in prod + /** @deprecated TODO: remove useBinaryTransform after SDK7 is fully in prod */ public SystemInfoReport(data: SystemInfoPayload & { useBinaryTransform?: boolean }) { trackEvent('system info report', data) @@ -342,6 +343,7 @@ export class BrowserInterface { // stub. there is no code about this in unity side yet } + /** @deprecated */ public Track(data: { name: string; properties: { key: string; value: string }[] | null }) { const properties: Record = {} if (data.properties) { @@ -574,6 +576,7 @@ export class BrowserInterface { // It's disabled because of security reasons. } + /** @deprecated */ public SetDelightedSurveyEnabled(data: { enabled: boolean }) { setDelightedSurveyEnabled(data.enabled) } From 71abc6efa77bc12fca83ef1e08f4f39716d4a178 Mon Sep 17 00:00:00 2001 From: Mateo Kuruk Miccino Date: Fri, 2 Dec 2022 15:05:03 -0300 Subject: [PATCH 2/3] remove waiting for system info report --- packages/unity-interface/initializer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/unity-interface/initializer.ts b/packages/unity-interface/initializer.ts index 1eb4a18ec..f81d903a9 100644 --- a/packages/unity-interface/initializer.ts +++ b/packages/unity-interface/initializer.ts @@ -101,7 +101,6 @@ async function loadInjectedUnityDelegate( const transport = webTransport({ wasmModule: originalUnity.Module }, (globalThis as any).DCL) await engineStartedFuture - await browserInterface.startedFuture document.body.addEventListener('click', () => { browserInterface.onUserInteraction.resolve() From 6b5b088b867eb0ebf5ab8cc64df1c27ae7569836 Mon Sep 17 00:00:00 2001 From: Mateo Kuruk Miccino Date: Wed, 14 Dec 2022 09:57:54 -0300 Subject: [PATCH 3/3] fix --- .../renderer-protocol/inverseRpc/services/analyticsService.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/renderer-protocol/inverseRpc/services/analyticsService.ts b/packages/renderer-protocol/inverseRpc/services/analyticsService.ts index 8bfe2089c..59309bbea 100644 --- a/packages/renderer-protocol/inverseRpc/services/analyticsService.ts +++ b/packages/renderer-protocol/inverseRpc/services/analyticsService.ts @@ -6,7 +6,6 @@ import { getPerformanceInfo } from '../../../shared/session/getPerformanceInfo' import { getUnityInstance } from '../../../unity-interface/IUnityInterface' import { trackEvent } from '../../../shared/analytics' import { setDelightedSurveyEnabled } from '../../../unity-interface/delightedSurvey' -import { transformSerializeOpt } from '../../../unity-interface/transformSerializationOpt' import { browserInterface } from '../../..//unity-interface/BrowserInterface' type UnityEvent = any @@ -42,8 +41,6 @@ export function registerAnalyticsKernelService(port: RpcServerPort