Release resources in browser when renderer view is gonna unloaded.

This commit is contained in:
Cheng Zhao 2013-05-01 10:59:29 +08:00
parent a674572dd4
commit 31d6be0e63
3 changed files with 14 additions and 0 deletions

View file

@ -31,6 +31,10 @@ class ObjectsStore
@stores[key] = new ObjectsStore unless @stores[key]?
@stores[key]
@releaseForRenderView: (processId, routingId) ->
key = "#{processId}_#{routingId}"
delete @stores[key]
# Objects in weak map will be not referenced (so we won't leak memory), and
# every object created in browser will have a unique id in weak map.
objectsWeakMap = new IDWeakMap
@ -72,3 +76,6 @@ exports.getAllWindows = () ->
exports.remove = (processId, routingId, storeId) ->
ObjectsStore.forRenderView(processId, routingId).remove storeId
exports.clear = (processId, routingId) ->
ObjectsStore.releaseForRenderView processId, routingId

View file

@ -43,6 +43,9 @@ ipc.on 'ATOM_BROWSER_GLOBAL', (event, processId, routingId, name) ->
catch e
event.result = type: 'error', value: e.message
ipc.on 'ATOM_BROWSER_RELEASE_RENDER_VIEW', (event, processId, routingId) ->
objectsRegistry.clear processId, routingId
ipc.on 'ATOM_BROWSER_CURRENT_WINDOW', (event, processId, routingId) ->
try
windows = objectsRegistry.getAllWindows()

View file

@ -53,6 +53,10 @@ metaToValue = (meta) ->
ret
# Release all resources of current render view when it's going to be unloaded.
window.addEventListener 'unload', (event) ->
ipc.sendChannelSync 'ATOM_BROWSER_RELEASE_RENDER_VIEW'
# Get remote module.
exports.require = (module) ->
meta = ipc.sendChannelSync 'ATOM_BROWSER_REQUIRE', module