Skip to content

Commit 2e00b76

Browse files
Tree-shake ViewCache
1 parent 13686cb commit 2e00b76

File tree

5 files changed

+134
-113
lines changed

5 files changed

+134
-113
lines changed

packages/database/src/core/SyncPoint.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import { CacheNode } from './view/CacheNode';
1919
import { ChildrenNode } from './snap/ChildrenNode';
2020
import { assert } from '@firebase/util';
21-
import { ViewCache } from './view/ViewCache';
21+
import { newViewCache } from './view/ViewCache';
2222
import {
2323
View,
2424
viewAddEventRegistration,
@@ -140,7 +140,7 @@ export function syncPointGetView(
140140
eventCache = ChildrenNode.EMPTY_NODE;
141141
eventCacheComplete = false;
142142
}
143-
const viewCache = new ViewCache(
143+
const viewCache = newViewCache(
144144
new CacheNode(eventCache, eventCacheComplete, false),
145145
new CacheNode(serverCache, serverCacheComplete, false)
146146
);

packages/database/src/core/view/CompleteChildSource.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { CacheNode } from './CacheNode';
1919
import { NamedNode, Node } from '../snap/Node';
2020
import { Index } from '../snap/indexes/Index';
2121
import { WriteTreeRef } from '../WriteTree';
22-
import { ViewCache } from './ViewCache';
22+
import { ViewCache, viewCacheGetCompleteServerSnap } from './ViewCache';
2323

2424
/**
2525
* Since updates to filtered nodes might require nodes to be pulled in from "outside" the node, this interface
@@ -83,14 +83,14 @@ export class WriteTreeCompleteChildSource implements CompleteChildSource {
8383
* @inheritDoc
8484
*/
8585
getCompleteChild(childKey: string): Node | null {
86-
const node = this.viewCache_.getEventCache();
86+
const node = this.viewCache_.eventCache;
8787
if (node.isCompleteForChild(childKey)) {
8888
return node.getNode().getImmediateChild(childKey);
8989
} else {
9090
const serverNode =
9191
this.optCompleteServerCache_ != null
9292
? new CacheNode(this.optCompleteServerCache_, true, false)
93-
: this.viewCache_.getServerCache();
93+
: this.viewCache_.serverCache;
9494
return this.writes_.calcCompleteChild(childKey, serverNode);
9595
}
9696
}
@@ -106,7 +106,7 @@ export class WriteTreeCompleteChildSource implements CompleteChildSource {
106106
const completeServerData =
107107
this.optCompleteServerCache_ != null
108108
? this.optCompleteServerCache_
109-
: this.viewCache_.getCompleteServerSnap();
109+
: viewCacheGetCompleteServerSnap(this.viewCache_);
110110
const nodes = this.writes_.calcIndexedSlice(
111111
completeServerData,
112112
child,

packages/database/src/core/view/View.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@ import { IndexedFilter } from './filter/IndexedFilter';
1919
import { ViewProcessor } from './ViewProcessor';
2020
import { ChildrenNode } from '../snap/ChildrenNode';
2121
import { CacheNode } from './CacheNode';
22-
import { ViewCache } from './ViewCache';
22+
import {
23+
newViewCache,
24+
ViewCache,
25+
viewCacheGetCompleteEventSnap,
26+
viewCacheGetCompleteServerSnap
27+
} from './ViewCache';
2328
import {
2429
EventGenerator,
2530
eventGeneratorGenerateEventsForChanges
@@ -59,8 +64,8 @@ export class View {
5964

6065
this.processor_ = new ViewProcessor(filter);
6166

62-
const initialServerCache = initialViewCache.getServerCache();
63-
const initialEventCache = initialViewCache.getEventCache();
67+
const initialServerCache = initialViewCache.serverCache;
68+
const initialEventCache = initialViewCache.eventCache;
6469

6570
// Don't filter server node with other filter than index, wait for tagged listen
6671
const serverSnap = indexFilter.updateFullNode(
@@ -84,7 +89,7 @@ export class View {
8489
filter.filtersNodes()
8590
);
8691

87-
this.viewCache_ = new ViewCache(newEventCache, newServerCache);
92+
this.viewCache_ = newViewCache(newEventCache, newServerCache);
8893
this.eventGenerator_ = new EventGenerator(this.query_);
8994
}
9095

@@ -94,18 +99,18 @@ export class View {
9499
}
95100

96101
export function viewGetServerCache(view: View): Node | null {
97-
return view.viewCache_.getServerCache().getNode();
102+
return view.viewCache_.serverCache.getNode();
98103
}
99104

100105
export function viewGetCompleteNode(view: View): Node | null {
101-
return view.viewCache_.getCompleteEventSnap();
106+
return viewCacheGetCompleteEventSnap(view.viewCache_);
102107
}
103108

104109
export function viewGetCompleteServerCache(
105110
view: View,
106111
path: Path
107112
): Node | null {
108-
const cache = view.viewCache_.getCompleteServerSnap();
113+
const cache = viewCacheGetCompleteServerSnap(view.viewCache_);
109114
if (cache) {
110115
// If this isn't a "loadsAllData" view, then cache isn't actually a complete cache and
111116
// we need to see if it contains the child we're interested in.
@@ -189,11 +194,11 @@ export function viewApplyOperation(
189194
operation.source.queryId !== null
190195
) {
191196
assert(
192-
view.viewCache_.getCompleteServerSnap(),
197+
viewCacheGetCompleteServerSnap(view.viewCache_),
193198
'We should always have a full cache before handling merges'
194199
);
195200
assert(
196-
view.viewCache_.getCompleteEventSnap(),
201+
viewCacheGetCompleteEventSnap(view.viewCache_),
197202
'Missing event cache, even though we have a server cache'
198203
);
199204
}
@@ -208,8 +213,8 @@ export function viewApplyOperation(
208213
view.processor_.assertIndexed(result.viewCache);
209214

210215
assert(
211-
result.viewCache.getServerCache().isFullyInitialized() ||
212-
!oldViewCache.getServerCache().isFullyInitialized(),
216+
result.viewCache.serverCache.isFullyInitialized() ||
217+
!oldViewCache.serverCache.isFullyInitialized(),
213218
'Once a server snap is complete, it should never go back'
214219
);
215220

@@ -218,7 +223,7 @@ export function viewApplyOperation(
218223
return viewGenerateEventsForChanges_(
219224
view,
220225
result.changes,
221-
result.viewCache.getEventCache().getNode(),
226+
result.viewCache.eventCache.getNode(),
222227
null
223228
);
224229
}
@@ -227,7 +232,7 @@ export function viewGetInitialEvents(
227232
view: View,
228233
registration: EventRegistration
229234
): Event[] {
230-
const eventSnap = view.viewCache_.getEventCache();
235+
const eventSnap = view.viewCache_.eventCache;
231236
const initialChanges: Change[] = [];
232237
if (!eventSnap.getNode().isLeafNode()) {
233238
const eventNode = eventSnap.getNode() as ChildrenNode;

packages/database/src/core/view/ViewCache.ts

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,51 +23,54 @@ import { Node } from '../snap/Node';
2323
*
2424
* serverSnap is the cached server data, eventSnap is the cached event data (server data plus any local writes).
2525
*/
26-
export class ViewCache {
27-
constructor(
28-
private readonly eventCache_: CacheNode,
29-
private readonly serverCache_: CacheNode
30-
) {}
31-
32-
updateEventSnap(
33-
eventSnap: Node,
34-
complete: boolean,
35-
filtered: boolean
36-
): ViewCache {
37-
return new ViewCache(
38-
new CacheNode(eventSnap, complete, filtered),
39-
this.serverCache_
40-
);
41-
}
26+
export interface ViewCache {
27+
readonly eventCache: CacheNode;
28+
readonly serverCache: CacheNode;
29+
}
4230

43-
updateServerSnap(
44-
serverSnap: Node,
45-
complete: boolean,
46-
filtered: boolean
47-
): ViewCache {
48-
return new ViewCache(
49-
this.eventCache_,
50-
new CacheNode(serverSnap, complete, filtered)
51-
);
52-
}
31+
export function newViewCache(
32+
eventCache: CacheNode,
33+
serverCache: CacheNode
34+
): ViewCache {
35+
return { eventCache, serverCache };
36+
}
5337

54-
getEventCache(): CacheNode {
55-
return this.eventCache_;
56-
}
38+
export function viewCacheUpdateEventSnap(
39+
viewCache: ViewCache,
40+
eventSnap: Node,
41+
complete: boolean,
42+
filtered: boolean
43+
): ViewCache {
44+
return newViewCache(
45+
new CacheNode(eventSnap, complete, filtered),
46+
viewCache.serverCache
47+
);
48+
}
5749

58-
getCompleteEventSnap(): Node | null {
59-
return this.eventCache_.isFullyInitialized()
60-
? this.eventCache_.getNode()
61-
: null;
62-
}
50+
export function viewCacheUpdateServerSnap(
51+
viewCache: ViewCache,
52+
serverSnap: Node,
53+
complete: boolean,
54+
filtered: boolean
55+
): ViewCache {
56+
return newViewCache(
57+
viewCache.eventCache,
58+
new CacheNode(serverSnap, complete, filtered)
59+
);
60+
}
6361

64-
getServerCache(): CacheNode {
65-
return this.serverCache_;
66-
}
62+
export function viewCacheGetCompleteEventSnap(
63+
viewCache: ViewCache
64+
): Node | null {
65+
return viewCache.eventCache.isFullyInitialized()
66+
? viewCache.eventCache.getNode()
67+
: null;
68+
}
6769

68-
getCompleteServerSnap(): Node | null {
69-
return this.serverCache_.isFullyInitialized()
70-
? this.serverCache_.getNode()
71-
: null;
72-
}
70+
export function viewCacheGetCompleteServerSnap(
71+
viewCache: ViewCache
72+
): Node | null {
73+
return viewCache.serverCache.isFullyInitialized()
74+
? viewCache.serverCache.getNode()
75+
: null;
7376
}

0 commit comments

Comments
 (0)