| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Reviewed-by: Trust Me
|
|
|
|
|
| |
Reviewed-by: Trust Me
(cherry picked from commit ac5c099cc3c5b8c7eec7a49fdeb8a21037230350)
|
|
|
|
| |
Task-number: QTBUG-15277, QTBUG-8231
|
|
|
|
| |
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
|
|
|
|
|
|
| |
This avoids going through the generic implementation in QIODevice
and avoids a 16kB buffer allocation from QIODevicePrivateLinearBuffer.
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
|
|
|
|
|
|
|
|
| |
The previous implementation was doing ungetChar() in a loop.
Task-number: QTBUG-9654
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
Reviewed-by: mread
|
|
|
|
|
|
|
|
|
|
|
|
| |
Change 02532ec80375c686503c4250c6ad6bb211515ec8 removed the early-exit
for 0 byte reads, causing us to hit code that assumed the buffer was
empty since nothing was read. It would thus read more into the end of
the buffer, causing the buffer to grow bigger than QIODEVICE_BUFFERSIZE.
Next, if the actual number of bytes we wanted to read was bigger than
the original buffer size we'd read the same data twice.
Reviewed-by: João Abecasis
Reviewed-by: Thiago Macieira
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The optimizations in d0645d1792e1cbdf417a923ea071975e4390fccd did not
take into account 0-length reads, used in network programming to check
connected state.
By not returning early in the case where lastReadChunkSize == maxSize
and maxSize == 0, we allow the underlying device to report error
conditions on 0-length reads.
This reverts commit aea71e2e02fa966842b094244bc3f5fc88f50f41, while
still ensuring that QIODevice::read() returns -1 on a closed device.
Reviewed-by: mread
Reviewed-by: Thiago Macieira
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
atEnd improvements, since atEnd is used in published example Qt read
loops. The two main ideas are to push the buffer test forward, which
optimises the normal buffered case, and to cache the file size till you
get to the end, which otherwise has to get the file size every 16K of
data.
read buffer improvements: The ring buffer structure was causing
significant performance overheads. In practice QIODevice has much
simpler requirements on its read buffer, and a linear buffer can be
used instead. This now uses a buffer optimised to QIODevice's use of
it.
QIODevice read function improvements. There are a number of sub-themes
here, which all are aimed at getting the normal buffered path through
the code done as fast as possible. This gives greatest improvements for
small reads, but it is these small reads that have the biggest
problems.
- removing the isSequential test, by setting a pointer to the qint64
to update and using a dummy qint64 target when isSequential, then
writing through the pointer.
- doing the readability check on the first read only, out of the fast
path
- doing the maxSize<0 test after the getchar fast path
- removing the buffer isEmpty test and giving a fast exit test
instead
- moving arithmetic out of the fast path, so "data" and "maxSize"
are now dynamically updating
- for RCVT builds, ARM mode is used for the read functions because
the 64-bit operations are much slower with this compiler in Thumb
mode
There are some other changes to read() which improve clarity:
- bytesToBuffer is now always set to QIODEVICE_BUFFERSIZE. This has
always been the case, its just that the logic was not clear before.
- moreToRead is set to false now in the case where the request was
met by a direct device read. Leaving it true in this case was
pointless, and setting it true in the converse case seems dangerous
because the function might iterate for a very long time, although
it might meet the API semantics better and would be a change in
behavior because the function used to not read more when it claimed
it would.
Reviewed-by: Joao
Reviewed-by: Aleksandar Babic
|
|
|
|
|
|
|
| |
In fact QIODevice still _does_ buffer access through QBuffer currently.
Reviewed-by: Markus Goetz
Reviewed-by: Joao
|
|
|
|
| |
Task: QTBUG-8450
|
|
|
|
|
|
|
|
|
| |
My patch from yesterday did not have any effect: Instead of
really using what was in the buffer, it used it but then read
it from the underlying device anyway.
Thanks Ritt Konstantin and Joao.
Reviewed-by: joao
|
|
|
|
| |
Reviewed-by: Trust Me
|
|
|
|
|
|
| |
.. and more testcases
Reviewed-by: joao
|
|
|
|
|
|
|
|
|
|
|
|
| |
When processing the result of QIODevice::readLine, forgot to take into
account that a '\0' is appended to the array. The terminating character
is not accounted for in the number of bytes returned.
By pre-allocating a byte for the terminating null character, we make
sure we'll actually read 16k bytes on each and every iteration.
Task-number: QTBUG-6019
Reviewed-by: Thiago Macieira
|
|
|
|
|
|
|
|
|
| |
Some network tests were set up to ignore a qWarning that was removed.
Fixed those tests.
Made warning from QIODevice::getChar have the right function name.
Reviewed-by: Thiago Macieira
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Chunk size increased to QIODEVICE_BUFFERSIZE (currently 16k) where
chunking is still needed. Namely, on sequential devices and when
QByteArray is unable to allocate a large enough buffer. This is
necessary for backward compatibility
Improved validation and prevention of overflow in maxSize argument.
Updated autotest that relied on a null QByteArray when no data was
available and no errors were found. The only guarantee we should be
providing in this case is an empty result -- even though that behavior
is preserved for the time being.
Affected functions:
* QIODevice::read(qint64 maxSize)
Chunking will still happen for large maxSize (i.e., QByteArray
resize fails), where it could be used as a synonym for
QIODevice::readAll().
No stat'ing performed. Read from device continues for as long as it
is successful. Stops if an error occurs or if we get less data than
requested.
* QIODevice::readAll()
Chunking is performed for sequential devices where total size
wouldn't be known beforehand. For sequential devices, reading
continues as long as data is returned, even if less than requested.
Non-sequential devices will be stat'ed once. If QIODevice::size
returns 0, this is taken to mean unknown size and chunking is
performed.
Otherwise, a single read request is made for the specified size. On
failure to resize QByteArray, nothing is returned.
* QIODevice::readLine(qint64 maxSize)
Chunking is performed for maxSize == 0, or if we can't allocate a
large enough buffer.
No stat'ing performed at this level. Read from device continues
until EOL is found, as long as we get all requested data.
Task-number: QT-2347
Reviewed-by: Thiago Macieira
Reviewed-by: Miikka Heikkinen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In Text mode there would be a huge penalty on each '\r' found even if
the internal buffer was not exhausted, because we would repeatedly
remove the '\r' from the buffer and put it back it. Before following
through to the unoptimized code, anyway.
Instead, we now loop over the internal buffer until we find a suitable
character.
Reduced code duplication by having QIODevice::getChar directly call
QIODevice::read and letting compilers do their job.
Reviewed-by: Markus Goetz
|
|
|
|
|
|
|
|
|
|
|
| |
Either the buffer has more data than is being skipped and it can be
cleared or it doesn't and we must skip it.
If the total size of QRingBuffer exceeds INT_MAX there'll be bigger
problems (e.g., QRingBuffer::size() will overflow) that can only be
handled there and there's no point trying to work around them here.
Reviewed-by: Markus Goetz
|
|
|
|
| |
Reviewed-by: Trust Me
|
| |
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
demos/boxes/glshaders.cpp
demos/boxes/vector.h
demos/embedded/fluidlauncher/pictureflow.cpp
demos/embedded/fluidlauncher/pictureflow.h
doc/src/desktop-integration.qdoc
doc/src/distributingqt.qdoc
doc/src/examples-overview.qdoc
doc/src/examples.qdoc
doc/src/frameworks-technologies/dbus-adaptors.qdoc
doc/src/geometry.qdoc
doc/src/groups.qdoc
doc/src/objecttrees.qdoc
doc/src/platform-notes.qdoc
doc/src/plugins-howto.qdoc
doc/src/qt3support.qdoc
doc/src/qtdbus.qdoc
doc/src/qtdesigner.qdoc
doc/src/qtgui.qdoc
doc/src/qtmain.qdoc
doc/src/qtopengl.qdoc
doc/src/qtsvg.qdoc
doc/src/qtuiloader.qdoc
doc/src/qundo.qdoc
doc/src/richtext.qdoc
doc/src/topics.qdoc
src/corelib/tools/qdumper.cpp
src/gui/embedded/qkbdpc101_qws.cpp
src/gui/embedded/qkbdsl5000_qws.cpp
src/gui/embedded/qkbdusb_qws.cpp
src/gui/embedded/qkbdvr41xx_qws.cpp
src/gui/embedded/qkbdyopy_qws.cpp
src/gui/embedded/qmousebus_qws.cpp
src/gui/embedded/qmousevr41xx_qws.cpp
src/gui/embedded/qmouseyopy_qws.cpp
src/gui/painting/qpaintengine_d3d.cpp
src/gui/painting/qwindowsurface_d3d.cpp
src/opengl/gl2paintengineex/glgc_shader_source.h
src/opengl/gl2paintengineex/qglpexshadermanager.cpp
src/opengl/gl2paintengineex/qglpexshadermanager_p.h
src/opengl/gl2paintengineex/qglshader.cpp
src/opengl/gl2paintengineex/qglshader_p.h
src/opengl/util/fragmentprograms_p.h
src/plugins/kbddrivers/linuxis/linuxiskbdhandler.cpp
src/plugins/mousedrivers/linuxis/linuxismousehandler.cpp
src/script/parser/qscript.g
src/script/qscriptarray_p.h
src/script/qscriptasm_p.h
src/script/qscriptbuffer_p.h
src/script/qscriptclass.cpp
src/script/qscriptclassdata_p.h
src/script/qscriptcompiler.cpp
src/script/qscriptcompiler_p.h
src/script/qscriptcontext.cpp
src/script/qscriptcontext_p.cpp
src/script/qscriptcontext_p.h
src/script/qscriptcontextfwd_p.h
src/script/qscriptecmaarray.cpp
src/script/qscriptecmaarray_p.h
src/script/qscriptecmaboolean.cpp
src/script/qscriptecmacore.cpp
src/script/qscriptecmadate.cpp
src/script/qscriptecmadate_p.h
src/script/qscriptecmaerror.cpp
src/script/qscriptecmaerror_p.h
src/script/qscriptecmafunction.cpp
src/script/qscriptecmafunction_p.h
src/script/qscriptecmaglobal.cpp
src/script/qscriptecmaglobal_p.h
src/script/qscriptecmamath.cpp
src/script/qscriptecmamath_p.h
src/script/qscriptecmanumber.cpp
src/script/qscriptecmanumber_p.h
src/script/qscriptecmaobject.cpp
src/script/qscriptecmaobject_p.h
src/script/qscriptecmaregexp.cpp
src/script/qscriptecmaregexp_p.h
src/script/qscriptecmastring.cpp
src/script/qscriptecmastring_p.h
src/script/qscriptengine.cpp
src/script/qscriptengine_p.cpp
src/script/qscriptengine_p.h
src/script/qscriptenginefwd_p.h
src/script/qscriptextenumeration.cpp
src/script/qscriptextenumeration_p.h
src/script/qscriptextqobject.cpp
src/script/qscriptextqobject_p.h
src/script/qscriptextvariant.cpp
src/script/qscriptfunction.cpp
src/script/qscriptfunction_p.h
src/script/qscriptgc_p.h
src/script/qscriptmember_p.h
src/script/qscriptobject_p.h
src/script/qscriptprettypretty.cpp
src/script/qscriptprettypretty_p.h
src/script/qscriptvalue.cpp
src/script/qscriptvalueimpl.cpp
src/script/qscriptvalueimpl_p.h
src/script/qscriptvalueimplfwd_p.h
src/script/qscriptvalueiteratorimpl.cpp
src/script/qscriptxmlgenerator.cpp
src/script/qscriptxmlgenerator_p.h
tests/auto/linguist/lupdate/testdata/recursivescan/project.ui
tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp
tests/auto/qkeyevent/tst_qkeyevent.cpp
tools/linguist/shared/cpp.cpp
|
| |
| |
| |
| | |
Reviewed-by: Trust Me
|
| |
| |
| |
| | |
Reviewed-by: Trust Me
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
doc/src/examples.qdoc
doc/src/plugins-howto.qdoc
doc/src/topics.qdoc
examples/phonon/musicplayer/mainwindow.cpp
src/3rdparty/freetype/src/base/ftobjs.c
src/corelib/global/qglobal.h
src/corelib/tools/qalgorithms.h
src/corelib/tools/qshareddata.cpp
src/corelib/tools/qsharedpointer.cpp
src/corelib/tools/tools.pri
src/corelib/xml/qxmlstream.h
src/gui/painting/painting.pri
src/gui/widgets/qdatetimeedit.cpp
tests/auto/qdesktopservices/qdesktopservices.pro
tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
tests/auto/qtextcodec/test/test.pro
|
| | | |
|
|\ \ \
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
examples/opengl/samplebuffers/glwidget.cpp
src/corelib/io/qfsfileengine_unix.cpp
src/corelib/kernel/qobject.cpp
src/corelib/tools/qsharedpointer.cpp
src/gui/gui.pro
tests/auto/qhttp/tst_qhttp.cpp
tests/auto/qkeyevent/tst_qkeyevent.cpp
|
| | |
| | |
| | |
| | | |
Reviewed-by: Trust Me
|
|\ \ \
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Conflicts:
.gitignore
configure.exe
src/corelib/concurrent/qtconcurrentthreadengine.h
src/corelib/global/qnamespace.h
src/gui/graphicsview/qgraphicssceneevent.h
src/gui/kernel/qapplication.cpp
src/gui/kernel/qapplication.h
src/gui/kernel/qapplication_p.h
src/gui/kernel/qapplication_qws.cpp
src/gui/kernel/qwidget.h
src/gui/painting/qpaintengine_raster.cpp
src/gui/text/qfontdatabase.cpp
src/network/access/qnetworkaccesshttpbackend.cpp
tests/auto/network-settings.h
tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro
tests/auto/qvariant/tst_qvariant.cpp
|
| | | |
|
| |\ \
| | |/ |
|
| | |
| | |
| | |
| | | |
Reviewed-by: Trust Me
|
|\ \ \
| |/ /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Bring Qt 4.6 into the Qt-S60 repo.
Conflicts:
configure.exe
mkspecs/features/qttest_p4.prf
qmake/generators/makefile.cpp
src/corelib/io/qdir.cpp
src/corelib/io/qprocess.h
src/corelib/kernel/qcoreevent.h
src/corelib/kernel/qobject.cpp
src/corelib/kernel/qsharedmemory_unix.cpp
src/corelib/thread/qthread_p.h
src/corelib/tools/qvector.h
src/gui/dialogs/qdialog.cpp
src/gui/dialogs/qfiledialog.cpp
src/gui/dialogs/qfiledialog_p.h
src/gui/dialogs/qmessagebox.cpp
src/gui/graphicsview/qgraphicsitem.cpp
src/gui/graphicsview/qgraphicsview.cpp
src/gui/image/qpixmapcache.cpp
src/gui/kernel/qapplication.cpp
src/gui/kernel/qapplication_p.h
src/gui/kernel/qwidget.cpp
src/gui/kernel/qwidget_p.h
src/gui/painting/qdrawhelper.cpp
src/gui/painting/qpaintengine_raster.cpp
src/gui/text/qfontengine_qpf.cpp
src/gui/widgets/qmenubar.cpp
src/network/socket/qlocalserver.cpp
src/testlib/qtestcase.cpp
src/testlib/testlib.pro
tests/auto/qimagereader/tst_qimagereader.cpp
tests/auto/qitemdelegate/tst_qitemdelegate.cpp
tests/auto/qnetworkreply/tst_qnetworkreply.cpp
tests/auto/qpixmap/qpixmap.pro
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Wherever I found that we were using a string instead of a single char
I fixed the code.
Reviewed-by: olivier
|
| |\ \
| | |/ |
|
| | |
| | |
| | |
| | | |
remove Qt3Support calls and include ctype.h for isprint()
|
| / |
|
| | |
|
|\ \
| |/
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
tests/auto/network-settings.h
tests/auto/qhttpsocketengine/tst_qhttpsocketengine.cpp
tests/auto/qiodevice/tst_qiodevice.cpp
tests/auto/qnativesocketengine/tst_qnativesocketengine.cpp
tests/auto/qsocks5socketengine/tst_qsocks5socketengine.cpp
tests/auto/qsslsocket/tst_qsslsocket.cpp
|
| |
| |
| |
| |
| |
| | |
Reviewed-by: Olivier Goffart
Reviewed-by: Peter Hartmann
Reviewed-by: João Abecasis
|
| |
|
|
|