         log "SourceToBitmapCache#get: cached:#{!!@_cache[url]} #{url}"
         log "initializerPromise: #{!!initializerPromise}"
       @_referenceCounts[url] = (@_referenceCounts[url] || 0) + 1
-      @_cache[url] ||= initializerPromise || Canvas.Bitmap.get url
+      out = @_cache[url] ||= initializerPromise || Canvas.Bitmap.get url
+      out.then (bitmap) => @_loaded[url] = bitmap
+      out
+
+    loaded: (url) -> @_loaded[url]
 
     # returns true if the bitmap was released
     # returns false if there are still other references

      validate:   (v) -> !v || isString v
      postSetter: (v) -> v && @_loadBitmapFromSource v

  _loadBitmapFromSource: (source) ->
    sourceToBitmapCache.get source
    .then (bitmap) =>

      @_referenceCounts[url]--
      if @_referenceCounts[url] == 0
        delete @_cache[url]
        delete @_loaded[url]
        true
      else
        false
