- Nov 06, 2014
-
-
Ulf Hermann authored
If there are deep object hierarchies connected to an InternalClass the recursive nature of the destroy() method could lead to a stack overflow. By changing the recursion into an iteration this is avoided. Change-Id: I6667f268a366749c2dbc5f7147882388f192a9c5 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Aug 25, 2014
-
-
Jani Heikkinen authored
- Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Change-Id: I84a565e2e0caa3b76bf291a7d188a57a4b00e1b0 Reviewed-by:
Jani Heikkinen <jani.heikkinen@digia.com>
-
- Jul 22, 2014
-
-
Lars Knoll authored
Remove the Ref classes, as they won't be required anymore once Managed and Managed::Data are separated. Change-Id: Ic6bec2d5b4ecf2595ce129dbb45bbf6a385138a5 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: Ifa9aac63fdb270fb449f11832a1792caeb6c6724 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: I1fcccd535ed356e736468337bd450270cd290044 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: I95dcdda8c68e2a5c36244798c8c10dcfdd69d2c2 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
This prepares for moving over to a d pointer scheme, where Managed subclasses don't hold any data directly. This is required to be able to move over to a modern GC. Change-Id: I3f59633ac07a7da461bd2d4f0f9f3a8e3b0baf02 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Apr 28, 2014
-
-
Simon Hausmann authored
As per reported bug, we have to protect ourselves against potential loops and can mark the internal classes much simpler by just walking through the memory pool they were allocated in. Task-number: QTBUG-38299 Change-Id: I3ae96e8082e76d06f4321c5aa6d2e9645d2830a0 Reviewed-by:
Lars Knoll <lars.knoll@digia.com>
-
- Apr 07, 2014
-
-
Simon Hausmann authored
With a real prototype chain it can happen that an internal class' prototype's class itself has a prototype. Therefore the first transition on the empty class is a PrototypeChange one, but the class the transition leads to may have PrototypeChange transitions itself, which weren't marked. There are multiple solutions to this, but this patch is the minimal fix by recursing fully through the internal class tree. That way it's easier to back-port the fix also into 5.2.x based branches. Task-number: QTBUG-37834 Change-Id: I901b13a2663fbad5844003ca5752f2f304de320c Reviewed-by:
Lars Knoll <lars.knoll@digia.com>
-
- Apr 04, 2014
-
-
Lars Knoll authored
Move the allocated member data into the garbage collected area, so that we can avoid using malloc/free for it. Change-Id: I20625efa67ecd60238568742b74854b0c8cb2e3e Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Mar 07, 2014
-
-
Lars Knoll authored
This cuts the memory required to store properties in an object in half for the common case. Accessor properties require two slots inside memberData, but data properties only one. Change-Id: I0bab1b88ca9ed5930abf065c77c89985b9ed5320 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Reserve two slots in the internal class for accessor properties. This opens up reducing the default storage required per data property to one Value. In practice this implies cutting the required memory in half. Change-Id: Ifed897852bbdfd810018f0d6b049fca6690ead2c Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Jan 03, 2014
-
-
Lars Knoll authored
vtable changes need to happen when the internal class is being constructed, not later on. Change-Id: Ibb9515745c9fc3507a5a90b4cc50a33e2e0d3f99 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Dec 04, 2013
-
-
Lars Knoll authored
Encapsulate accesses to the current context, and rework the way we push and pop this context from the context stack. Largely a cleanup, but simplifies the code in the long term Change-Id: I409e378490d0ab027be6a4c01a4031b2ea35c51d Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Remove all the calls to setVTable that were in performance critical parts of the code. This now brings performance back to the level we had with the vtable inlined in the Managed objects. Change-Id: I76317cc5c53b5b700d1d3883b954407142a4c424 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
This saves one pointer per object, and willmake other optimizations easier in the future. Change-Id: I1324cad31998896b5dc76af3c8a7ee9d86283bfe Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Nov 19, 2013
-
-
Lars Knoll authored
Due to a inefficiency in our InternalClass implementation, we were not sharing the string and attribute table between internal class instances. This was extremely inefficient with the Qt object, as it created around 1000 internal classes with large string and property tables. With the patch these tables are now shared. Reduces memory consumption of a QQmlEngine instance from around 6.5M to a couple of 100k. Change-Id: Ib763f31deca0808c000ac2c30aa0b05e806bda40 Reviewed-by:
Erik Verbruggen <erik.verbruggen@digia.com>
-
- Nov 05, 2013
-
-
Lars Knoll authored
Don't use recursive function calls anymore. Instead, push marked objects onto the JS stack, and then pop them off when their children are being marked. Should reduce stack memory usage, and improves performance by ~5%. Change-Id: I2d37d97579144fcba87ec8e9fd545dd220c01fbb Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Nov 04, 2013
-
-
Erik Verbruggen authored
Change-Id: Ic0492fbe31a1e134674bc6c20381f735dd6d5b7a Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Oct 02, 2013
-
-
Lars Knoll authored
Don't have an implicit cast operator to Returned<T> anymore, and return a T* from the operator->() Change-Id: If4165071b986bfc84a157560d94d39c2dcfbc9e1 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Sep 21, 2013
-
-
Lars Knoll authored
Change-Id: I8e2dad0e9e34c5a549952bc0765cd57f6aa8aadf Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Sep 02, 2013
-
-
Lars Knoll authored
Rather use the correct internalClass directly when constructing the objects. Change-Id: I8e916f1ce8f83d291c08ca6332fe85b1f57b90b5 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
The prototype is actually the same for most objects. By moving it into the internal class, we can save 8 bytes per object, as well as allowing for some future optimizations. Also fix a bug in the implementation of the Error prototype objects. Change-Id: I4d4b641055f644a9b088f27be34bfdb0446279b7 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: Ifa97d3354a7a7afadf70f9ba540716bd5b1eef44 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Aug 08, 2013
-
-
Lars Knoll authored
Move the v4 engine classes from a subdir of qml/qml into two subdirs (compiler and jsruntime) of the qml module Remove an unsued qv4syntaxchecker class, and move the moth code directly into compiler. Change-Id: I6929bede1f25098e6cb2e68087e779fac16b0c68 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Jun 28, 2013
-
-
Simon Hausmann authored
Change-Id: Ifd739fb83893dbaada946754e9adb381320ffbb8 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: I5884d8f10d9d864578376964e038fa8e477dbff2 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Hashing on the pointer value of an identifier doesn't really make sense. We already have a good hash value for the identifier, so let's re-use it. In addition, this allows to look up strings that aren't identifiers. Change-Id: I9bdb4aa89ae36410f24b3e58c641339e115e4c5f Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
This reduces compile time dependencies. Change-Id: I7e68ec36022fb0b1dcc10be0cc345aa207ea110c Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Make it a template based class, so we can store more then just integers here and replace more StringHash'es with it. Change-Id: I21442d13c6260f184bc7b63a8a58e826699f0c83 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: Ie3e23e10644ce957a0029e83a43367a2339d5335 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Use a hand written hash table for the identifiers. This saves quite some memory, speeds up the table, and allows converting 8bit strings into identifiers. Change-Id: Id289764097b50bf6c1fc83b1b8c930b5e62a7538 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: Ifbf9e947c305e33def311b76a38af17dae90b46b Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Identifier are now (opaque) pointers. They contain the string and it's hash value making conversion from Identifier back to it's string value a no-op. Change-Id: Ied7e845a981514890ff6a686e0e3e3057e6b6fbf Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
Change-Id: Ib4c755cc702155a5cd0428901cf0b8256b76b50a Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
Lars Knoll authored
the old code used QHash to store the id to index mapping, which got detached whenever a new internal class gets created. Replace this with a much cheaper custom made hash table. The new hash table actually doesn't require a detach for the first transition to a new internal class. This saves significant memory and time esp. for very large objects such as the Qt object. Change-Id: Id1e3af4db59cff39d44ff1c211d46f37ff117ea6 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Jun 24, 2013
-
-
Sergio Ahumada authored
Change-Id: Id78dfee1ac76a3b4d0976864353c4eb50e63c08b Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- Jun 23, 2013
-
-
Simon Hausmann authored
The string pointer we store in the nameMap is not marked directly, i.e. our class hierarchy doesn't have a recursive mark() function. So we must otherwise make sure that that string is marked, otherwise we get dangling pointers that are likely to point to _other_ strings later. This is hard to reproduce, but it does happen with MM_AGGRESSIVE_GC=1 and the singletonType test in qqmlecmascript, when due to the dangling pointer we end up using the wrong property name in freeze() when iterating through the name map. This patch fixes that by storing the actual identifier string, that's guaranteed to get marked. Change-Id: I28d1a2d2f56fe3abf692229ba008af8b0789189e Reviewed-by:
Lars Knoll <lars.knoll@digia.com>
-
- May 08, 2013
-
-
Lars Knoll authored
We can retrieve the current context from the Object itself, so it's possible to offer a simplified get/put API that doesn't require a context argument. Clean up a circular include dependency between qv4engine and qv4object. Change-Id: I39a37d479ace1ffbfe8ac59b393cab8e4be07677 Reviewed-by:
Simon Hausmann <simon.hausmann@digia.com>
-
- May 06, 2013
-
-
Simon Hausmann authored
Allocate the InternalClass instances in a memory pool and delete them all in one shot at the end. The memory pool won't call the destructor, so we have to introduce our own recursive destroy() method, that will free the memory allocated. Change-Id: I507a893475181f765acf545b5cd2bfccc8c29747 Reviewed-by:
Lars Knoll <lars.knoll@digia.com>
-