Skip to content

Commit 18a3ae3

Browse files
authored
Merge pull request #250 from wechat-miniprogram/feat-dropBackendAfterRelease
Add dropBackendAfterRelease for backend context
2 parents 0a8eb7f + 364b044 commit 18a3ae3

File tree

6 files changed

+36
-12
lines changed

6 files changed

+36
-12
lines changed

glass-easel/src/backend/suggested_backend_protocol.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ export type ElementForDomLike = {
4646
}
4747

4848
export interface Context<Ctx, Elem> {
49+
dropBackendAfterRelease?: boolean
50+
4951
createContext(
5052
options: unknown,
5153
cb: (ContextWrapper: GetWrapper<Partial<Context<Ctx, Elem> & Ctx>>) => void,

glass-easel/src/element.ts

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,22 @@ export const enum StyleSegmentIndex {
7676
type composedContext = composedBackend.Context | domlikeBackend.Context
7777
type composedElement = composedBackend.Element | domlikeBackend.Element
7878

79-
type DestroyedBackendContext = { mode: BackendMode; destroyed: true }
80-
const DESTROYED_SHADOW_BACKEND_CONTEXT = { mode: BackendMode.Shadow, destroyed: true } as const
81-
const DESTROYED_COMPOSED_BACKEND_CONTEXT = { mode: BackendMode.Composed, destroyed: true } as const
82-
const DESTROYED_DOMLIKE_BACKEND_CONTEXT = { mode: BackendMode.Domlike, destroyed: true } as const
79+
type DestroyedBackendContext = { mode: BackendMode; destroyed: true; dropBackendAfterRelease: true }
80+
const DESTROYED_SHADOW_BACKEND_CONTEXT = {
81+
mode: BackendMode.Shadow,
82+
destroyed: true,
83+
dropBackendAfterRelease: true,
84+
} as const
85+
const DESTROYED_COMPOSED_BACKEND_CONTEXT = {
86+
mode: BackendMode.Composed,
87+
destroyed: true,
88+
dropBackendAfterRelease: true,
89+
} as const
90+
const DESTROYED_DOMLIKE_BACKEND_CONTEXT = {
91+
mode: BackendMode.Domlike,
92+
destroyed: true,
93+
dropBackendAfterRelease: true,
94+
} as const
8395

8496
export type DoubleLinkedList<T> = {
8597
value: T
@@ -410,14 +422,16 @@ export class Element implements NodeCast {
410422
;(this._$backendElement as backend.Element | composedBackend.Element).release()
411423
if (ENV.DEV) performanceMeasureEnd()
412424
}
413-
this._$backendElement = null
414425
}
415-
if (BM.COMPOSED || (BM.DYNAMIC && this.getBackendMode() === BackendMode.Composed)) {
416-
this._$nodeTreeContext = DESTROYED_COMPOSED_BACKEND_CONTEXT
417-
} else if (BM.DOMLIKE || (BM.DYNAMIC && this.getBackendMode() === BackendMode.Domlike)) {
418-
this._$nodeTreeContext = DESTROYED_DOMLIKE_BACKEND_CONTEXT
419-
} else {
420-
this._$nodeTreeContext = DESTROYED_SHADOW_BACKEND_CONTEXT
426+
if (this._$nodeTreeContext.dropBackendAfterRelease) {
427+
this._$backendElement = null
428+
if (BM.COMPOSED || (BM.DYNAMIC && this.getBackendMode() === BackendMode.Composed)) {
429+
this._$nodeTreeContext = DESTROYED_COMPOSED_BACKEND_CONTEXT
430+
} else if (BM.DOMLIKE || (BM.DYNAMIC && this.getBackendMode() === BackendMode.Domlike)) {
431+
this._$nodeTreeContext = DESTROYED_DOMLIKE_BACKEND_CONTEXT
432+
} else {
433+
this._$nodeTreeContext = DESTROYED_SHADOW_BACKEND_CONTEXT
434+
}
421435
}
422436
}
423437

glass-easel/src/text_node.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ export class TextNode implements NodeCast {
123123
;(this._$backendElement as backend.Element | composedBackend.Element).release()
124124
if (ENV.DEV) performanceMeasureEnd()
125125
}
126+
}
127+
if (this.ownerShadowRoot._$nodeTreeContext.dropBackendAfterRelease) {
126128
this._$backendElement = null
127129
}
128130
}

glass-easel/tests/base/composed_backend.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export class Context implements glassEasel.composedBackend.Context {
2626
private _$destroyed = false
2727
public _$currentMethod: string | null = null
2828

29+
public dropBackendAfterRelease = true
30+
2931
private _$eventEmitter:
3032
| null
3133
| ((

glass-easel/tests/base/env.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ export const multiTmpl = (src: { [path: string]: string }, options?: TemplateOpt
124124
}
125125
}
126126

127-
export const domBackend = new glassEasel.CurrentWindowBackendContext()
127+
export const domBackend = new class extends glassEasel.CurrentWindowBackendContext {
128+
public dropBackendAfterRelease = true
129+
}
128130
export const shadowBackend = new ShadowBackend.Context()
129131
export const composedBackend = new ComposedBackend.Context()
130132

glass-easel/tests/base/shadow_backend.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export class Context implements glassEasel.backend.Context {
1818
private _$destroyed = false
1919
public _$currentMethod: string | null = null
2020

21+
public dropBackendAfterRelease = true
22+
2123
private _$createEvent:
2224
| null
2325
| ((

0 commit comments

Comments
 (0)