Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: third_party/mojo/src/mojo/public/go/system/data_pipe.go

Issue 1019173002: Update mojo sdk to rev 7214b7ec7d27563b2666afad86cf1c5895c56c18 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Keep permission service alive if embedder drops requests Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package system 5 package system
6 6
7 //#include "c_allocators.h"
8 //#include "mojo/public/c/system/core.h"
9 import "C"
10 import "unsafe"
11
12 // ConsumerHandle is a handle for the consumer part of a data pipe. 7 // ConsumerHandle is a handle for the consumer part of a data pipe.
13 type ConsumerHandle interface { 8 type ConsumerHandle interface {
14 Handle 9 Handle
15 10
16 // ReadData reads data from the data pipe consumer handle with the 11 // ReadData reads data from the data pipe consumer handle with the
17 // given flags. On success, returns the data that was read. 12 // given flags. On success, returns the data that was read.
18 ReadData(flags MojoReadDataFlags) (MojoResult, []byte) 13 ReadData(flags MojoReadDataFlags) (MojoResult, []byte)
19 14
20 // BeginReadData begins a two-phase read from the data pipe consumer. 15 // BeginReadData begins a two-phase read from the data pipe consumer.
21 // On success, returns a slice from which the caller can read up to its 16 // On success, returns a slice from which the caller can read up to its
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 // size. The slice returned from |BeginWriteData()| must have been 70 // size. The slice returned from |BeginWriteData()| must have been
76 // filled with exactly |numBytesWritten| bytes of data. 71 // filled with exactly |numBytesWritten| bytes of data.
77 // 72 //
78 // On failure, the two-phase write (if any) is ended (so the handle may 73 // On failure, the two-phase write (if any) is ended (so the handle may
79 // become writable again, if there's space available) but no data 74 // become writable again, if there's space available) but no data
80 // written to the slice is "put into" the data pipe. 75 // written to the slice is "put into" the data pipe.
81 EndWriteData(numBytesWritten int) MojoResult 76 EndWriteData(numBytesWritten int) MojoResult
82 } 77 }
83 78
84 type dataPipeConsumer struct { 79 type dataPipeConsumer struct {
80 // baseHandle should always be the first component of this struct,
81 // see |finalizeHandle()| for more details.
85 baseHandle 82 baseHandle
86 } 83 }
87 84
88 func (h *dataPipeConsumer) ReadData(flags MojoReadDataFlags) (MojoResult, []byte ) { 85 func (h *dataPipeConsumer) ReadData(flags MojoReadDataFlags) (MojoResult, []byte ) {
89 h.core.mu.Lock() 86 h.core.mu.Lock()
90 » defer h.core.mu.Unlock() 87 » r, buf := sysImpl.ReadData(uint32(h.mojoHandle), uint32(flags))
91 88 » h.core.mu.Unlock()
92 » cParams := C.MallocReadDataParams() 89 » return MojoResult(r), buf
93 » defer C.FreeReadDataParams(cParams)
94 » *cParams.num_bytes = 0
95 » if result := C.MojoReadData(h.mojoHandle.cValue(), nil, cParams.num_byte s, C.MOJO_READ_DATA_FLAG_QUERY); result != C.MOJO_RESULT_OK {
96 » » return MojoResult(result), nil
97 » }
98 » dataArray := C.MallocDataArray(*cParams.num_bytes)
99 » defer C.FreeDataArray(dataArray)
100 » result := C.MojoReadData(h.mojoHandle.cValue(), dataArray.elements, cPar ams.num_bytes, flags.cValue())
101 » dataSize := int(*cParams.num_bytes)
102 » data := make([]byte, dataSize)
103 » cData := unsafeByteSlice(unsafe.Pointer(dataArray.elements), dataSize)
104 » copy(data, cData)
105 » return MojoResult(result), data
106 } 90 }
107 91
108 func (h *dataPipeConsumer) BeginReadData(numBytes int, flags MojoReadDataFlags) (MojoResult, []byte) { 92 func (h *dataPipeConsumer) BeginReadData(numBytes int, flags MojoReadDataFlags) (MojoResult, []byte) {
109 h.core.mu.Lock() 93 h.core.mu.Lock()
110 » defer h.core.mu.Unlock() 94 » r, buf := sysImpl.BeginReadData(uint32(h.mojoHandle), uint32(numBytes), uint32(flags))
111 95 » h.core.mu.Unlock()
112 » cParams := C.MallocTwoPhaseActionParams() 96 » return MojoResult(r), buf
113 » defer C.FreeTwoPhaseActionParams(cParams)
114 » *cParams.num_bytes = C.uint32_t(numBytes)
115 » result := C.MojoBeginReadData(h.mojoHandle.cValue(), cParams.buffer, cPa rams.num_bytes, flags.cValue())
116 » buffer := unsafeByteSlice(unsafe.Pointer(*cParams.buffer), int(*cParams. num_bytes))
117 » return MojoResult(result), buffer
118 } 97 }
119 98
120 func (h *dataPipeConsumer) EndReadData(numBytesRead int) MojoResult { 99 func (h *dataPipeConsumer) EndReadData(numBytesRead int) MojoResult {
121 h.core.mu.Lock() 100 h.core.mu.Lock()
122 » defer h.core.mu.Unlock() 101 » r := sysImpl.EndReadData(uint32(h.mojoHandle), uint32(numBytesRead))
123 102 » h.core.mu.Unlock()
124 » return MojoResult(C.MojoEndReadData(h.mojoHandle.cValue(), C.uint32_t(nu mBytesRead))) 103 » return MojoResult(r)
125 } 104 }
126 105
127 type dataPipeProducer struct { 106 type dataPipeProducer struct {
107 // baseHandle should always be the first component of this struct,
108 // see |finalizeHandle()| for more details.
128 baseHandle 109 baseHandle
129 } 110 }
130 111
131 func (h *dataPipeProducer) WriteData(data []byte, flags MojoWriteDataFlags) (Moj oResult, int) { 112 func (h *dataPipeProducer) WriteData(data []byte, flags MojoWriteDataFlags) (Moj oResult, int) {
132 h.core.mu.Lock() 113 h.core.mu.Lock()
133 » defer h.core.mu.Unlock() 114 » r, bytesWritten := sysImpl.WriteData(uint32(h.mojoHandle), data, uint32( flags))
134 115 » h.core.mu.Unlock()
135 » cParams := C.MallocWriteDataParams(C.uint32_t(len(data))) 116 » return MojoResult(r), int(bytesWritten)
136 » defer C.FreeWriteDataParams(cParams)
137 » *cParams.num_bytes = C.uint32_t(len(data))
138 » cArray := unsafeByteSlice(unsafe.Pointer(cParams.elements), len(data))
139 » copy(cArray, data)
140 » result := C.MojoWriteData(h.mojoHandle.cValue(), cParams.elements, cPara ms.num_bytes, flags.cValue())
141 » return MojoResult(result), int(*cParams.num_bytes)
142 } 117 }
143 118
144 func (h *dataPipeProducer) BeginWriteData(numBytes int, flags MojoWriteDataFlags ) (MojoResult, []byte) { 119 func (h *dataPipeProducer) BeginWriteData(numBytes int, flags MojoWriteDataFlags ) (MojoResult, []byte) {
145 h.core.mu.Lock() 120 h.core.mu.Lock()
146 » defer h.core.mu.Unlock() 121 » r, buf := sysImpl.BeginWriteData(uint32(h.mojoHandle), uint32(numBytes), uint32(flags))
147 122 » h.core.mu.Unlock()
148 » cParams := C.MallocTwoPhaseActionParams() 123 » return MojoResult(r), buf
149 » defer C.FreeTwoPhaseActionParams(cParams)
150 » *cParams.num_bytes = C.uint32_t(numBytes)
151 » result := C.MojoBeginWriteData(h.mojoHandle.cValue(), cParams.buffer, cP arams.num_bytes, flags.cValue())
152 » buffer := unsafeByteSlice(unsafe.Pointer(*cParams.buffer), int(*cParams. num_bytes))
153 » return MojoResult(result), buffer
154 } 124 }
155 125
156 func (h *dataPipeProducer) EndWriteData(numBytesWritten int) MojoResult { 126 func (h *dataPipeProducer) EndWriteData(numBytesWritten int) MojoResult {
157 h.core.mu.Lock() 127 h.core.mu.Lock()
158 » defer h.core.mu.Unlock() 128 » r := sysImpl.EndWriteData(uint32(h.mojoHandle), uint32(numBytesWritten))
159 129 » h.core.mu.Unlock()
160 » return MojoResult(C.MojoEndWriteData(h.mojoHandle.cValue(), C.uint32_t(n umBytesWritten))) 130 » return MojoResult(r)
161 } 131 }
OLDNEW
« no previous file with comments | « third_party/mojo/src/mojo/public/go/system/core.go ('k') | third_party/mojo/src/mojo/public/go/system/handle.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698