[squeak-dev] The Trunk: Graphics-nice.296.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Tue Jul 22 20:53:50 UTC 2014
2014-07-22 1:29 GMT+02:00 <commits at source.squeak.org>:
> Nicolas Cellier uploaded a new version of Graphics to project The Trunk:
> http://source.squeak.org/trunk/Graphics-nice.296.mcz
>
> ==================== Summary ====================
>
> Name: Graphics-nice.296
> Author: nice
> Time: 22 July 2014, 1:28:48.356 am
> UUID: 3f6d869e-9929-4e08-b137-aae22dd3eee6
> Ancestors: Graphics-nice.295
>
> Don't try to accelerate GIF reading by copying the stream in memory.
> This should be the purpose of a decent file buffering policy, and if ever
> that was not the case, then we should fix the file buffering policy rather
> than trying to patch each and every client site.
>
> Especially when the patch is testing that the stream is in memory with a
> class identity to ReadWriteStream!!!
> Frankly, how do we know that it's not a RWBinaryOrTextStream ;)
>
> So why reading an image with a ReadWriteStream?
> Oh, sure, this is in ImageReadWriter, so we may need a ReadWriteStream?
> No, no, and no!
> This thing will either read or write but NEVER read and write.
> One simple role, one simple class, no UberPotentSwissKnifeStream with
> UberComplexStateToManage (readPosition + writePosition + readLimit +
> writeLimit + readBuffer + writeBuffer + readWriteBufferInteraction).
>
> What's coming next?
> Easy to guess, see what (ImageReadWriter>>on:) does frivously to our
> stream:
> reset??? Hey, ImageReadWriter, why do you take the responsibility to reset
> the stream? Did you ask the permission? Did you think of possible side
> effects?
>
the answer is summarized there:
readNativeResourceFrom: byteStream
| img aStream |
(byteStream isKindOf: FileStream) ifTrue:[
"Ugly, but ImageReadWriter will send #reset which is implemented as
#reopen and we may not be able to do so."
aStream := RWBinaryOrTextStream with: byteStream contents.
] ifFalse:[
aStream := byteStream.
].
Ugly says it all.
> I'm quite sure those reset has something to do with following usage:
> (ReadWriteStream with: 'foo') next -> nil
> but:
> (ReadWriteStream with: 'foo') reset; next -> $f
> Pure Read/Write madness.
> There is more room for cleanup here, but only after I get rid of more
> R/WThing (TM), otherwise I could break some insane expectations.
>
> =============== Diff against Graphics-nice.295 ===============
>
> Item was changed:
> ----- Method: AnimatedGIFReadWriter>>allImages (in category 'accessing')
> -----
> allImages
> | body colorTable |
> - stream class == ReadWriteStream ifFalse: [
> - stream binary.
> - self on: (ReadWriteStream with: (stream
> contentsOfEntireFile))].
> localColorTable := nil.
> forms := OrderedCollection new.
> delays := OrderedCollection new.
> comments := OrderedCollection new.
> self readHeader.
> [(body := self readBody) == nil]
> whileFalse: [colorTable := localColorTable
> ifNil: [colorPalette].
> transparentIndex
> ifNotNil: [transparentIndex + 1 >
> colorTable size
> ifTrue: [colorTable :=
> colorTable forceTo: transparentIndex + 1 paddingWith: Color white].
> colorTable at: transparentIndex +
> 1 put: Color transparent].
> body colors: colorTable.
> forms add: body.
> delays add: delay].
> ^ forms!
>
> Item was changed:
> ----- Method: GIFReadWriter>>nextImage (in category 'accessing') -----
> nextImage
> + "Read in the next GIF image from the stream."
> - "Read in the next GIF image from the stream. Read it all into
> - memory first for speed."
>
> | f thisImageColorTable |
> - stream class == ReadWriteStream ifFalse: [
> - stream binary.
> - self on: (ReadWriteStream with: (stream
> contentsOfEntireFile))].
>
> localColorTable := nil.
> self readHeader.
> f := self readBody.
> self close.
> f == nil ifTrue: [^ self error: 'corrupt GIF file'].
>
> thisImageColorTable := localColorTable ifNil: [colorPalette].
> transparentIndex ifNotNil: [
> transparentIndex + 1 > thisImageColorTable size ifTrue: [
> thisImageColorTable := thisImageColorTable
> forceTo: transparentIndex + 1
> paddingWith: Color white
> ].
> thisImageColorTable at: transparentIndex + 1 put: Color
> transparent
> ].
> f colors: thisImageColorTable.
> ^ f
> !
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20140722/81f1ea08/attachment.htm
More information about the Squeak-dev
mailing list
|