summaryrefslogtreecommitdiff
path: root/source/fitz/store.c
AgeCommit message (Collapse)Author
2016-04-26Fix fz_store thinko.Robin Watts
Previously, we would refuse to store any object in the store that was larger than the store limits. We'd also refuse to store any object that took the total store size over the limit. This was wrong. Consider the case where we have a store of 1 byte, and a page that repeatedly uses the same font. The first time we meet the font, we look in the store, it isn't there, we load it, and we try to store it. The current code refuses to store it, and we continue, putting that font into the display list. The next time we meet to the font, we look in the store, it still isn't there, we load it, and we try to store it. Again we refuse to store it, and that copy of the font goes into the display list. The net effect of this is that we end up using far more memory in total than we would have done had we stored the first one. The code here, therefore, changes the store to always store objects regardless of their size. Given that we have already loaded the objects into memory before we store them, this doesn't actually cost us any extra memory. If an object is dropped (bringing the reference count down to 1, being the reference for the stores copy), then the object is NOT freed instantly, but will be freed either on the next attempt to store an object, or on the next scavenging malloc.
2016-03-16Avoid unused var warnings in Memento ref counting code.Robin Watts
2016-03-15Make all ref changes on storable items Memento trackable.Robin Watts
2016-01-13Add lots of consts.Robin Watts
In general, we should use 'const fz_blah' in device calls whenever the callee should not alter the fz_blah. Push this through. This shows up various places where we fz_keep and fz_drop these const things. I've updated the fz_keep and fz_drops with appropriate casts to remove the consts. We may need to do the union dance to avoid the consts for some compilers, but will only do that if required. I think this is nicer overall, even allowing for the const<->no const problems.
2015-12-11Use fz_output instead of FILE* for most of our output needs.Tor Andersson
Use fz_output in debug printing functions. Use fz_output in pdfshow. Use fz_output in fz_trace_device instead of stdout. Use fz_output in pdf-write.c. Rename fz_new_output_to_filename to fz_new_output_with_path. Add seek and tell to fz_output. Remove unused functions like fz_fprintf. Fix typo in pdf_print_obj.
2015-04-07Fix whitespace.Tor Andersson
2015-02-17Add helper functions to keep/drop reference counts with locking.Tor Andersson
Add locks around fz_path and fz_text reference counting.
2015-02-17Add ctx parameter and remove embedded contexts for API regularity.Tor Andersson
Purge several embedded contexts: Remove embedded context in fz_output. Remove embedded context in fz_stream. Remove embedded context in fz_device. Remove fz_rebind_stream (since it is no longer necessary). Remove embedded context in svg_device. Remove embedded context in XML parser. Add ctx argument to fz_document functions. Remove embedded context in fz_document. Remove embedded context in pdf_document. Remove embedded context in pdf_obj. Make fz_page independent of fz_document in the interface. We shouldn't need to pass the document to all functions handling a page. If a page is tied to the source document, it's redundant; otherwise it's just pointless. Fix reference counting oddity in fz_new_image_from_pixmap.
2015-02-17Rename fz_close_* and fz_free_* to fz_drop_*.Tor Andersson
Rename fz_close to fz_drop_stream. Rename fz_close_archive to fz_drop_archive. Rename fz_close_output to fz_drop_output. Rename fz_free_* to fz_drop_*. Rename pdf_free_* to pdf_drop_*. Rename xps_free_* to xps_drop_*.
2014-06-30Fix coding style issues and remove C99 mid-block declaration.Matt Holgate
2014-06-19Fix compiler warning.Matt Holgate
2014-06-18Fix for bug #694405 - iOS Pdf CrashMatt Holgate
If an iOS app uses too much memory, the OS asks it to free up some space. If it doesn't do so in a timely manner, it will get a second warning before being killed by the OS. In other platforms, where malloc() return NULL in OOM, the store scavenger releases memory when mallocs fail. In iOS, mallocs usually never return NULL because the app is killed before this can happen. Therefore, we need to initiate a scavenge from the low memory notification instead. We evict the store to 50% of its current size when a memory warning occurs when it is in the foreground, and 0% when a memory warning occurs whilst it is in the background. Having said this, I didn't manage to get a background warning to occur, presumably because we don't request background execution Therefore, I think in practice the OS just kills the process. However, this will be useful if we ever add background execution.
2013-06-20Rearrange source files.Tor Andersson