Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
6238964d
Commit
6238964d
authored
Nov 05, 2009
by
Robert Griesemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gofmt-ify nacl
R=rsc
http://go/go-review/1018062
parent
77334b98
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
419 additions
and
420 deletions
+419
-420
src/pkg/exp/nacl/av/av.go
src/pkg/exp/nacl/av/av.go
+36
-37
src/pkg/exp/nacl/av/event.go
src/pkg/exp/nacl/av/event.go
+301
-299
src/pkg/exp/nacl/av/image.go
src/pkg/exp/nacl/av/image.go
+8
-8
src/pkg/exp/nacl/srpc/client.go
src/pkg/exp/nacl/srpc/client.go
+22
-22
src/pkg/exp/nacl/srpc/msg.go
src/pkg/exp/nacl/srpc/msg.go
+46
-47
src/pkg/exp/nacl/srpc/server.go
src/pkg/exp/nacl/srpc/server.go
+6
-7
No files found.
src/pkg/exp/nacl/av/av.go
View file @
6238964d
...
...
@@ -21,13 +21,13 @@ import (
"unsafe"
;
)
var
srpcEnabled
=
srpc
.
Enabled
()
;
var
srpcEnabled
=
srpc
.
Enabled
()
// native_client/src/trusted/service_runtime/include/sys/audio_video.h
// Subsystem values for Init.
const
(
SubsystemVideo
=
1
<<
iota
;
SubsystemVideo
=
1
<<
iota
;
SubsystemAudio
;
SubsystemEmbed
;
)
...
...
@@ -35,20 +35,20 @@ const (
// Audio formats.
const
(
AudioFormatStereo44K
=
iota
;
AudioFormatStereo44K
=
iota
;
AudioFormatStereo48K
;
)
// A Window represents a connection to the Native Client window.
// It implements draw.Context.
type
Window
struct
{
Embedded
bool
;
// running as part of a web page?
*
Image
;
// screen image
Embedded
bool
;
// running as part of a web page?
*
Image
;
// screen image
mousec
chan
draw
.
Mouse
;
kbdc
chan
int
;
quitc
chan
bool
;
resizec
chan
bool
;
mousec
chan
draw
.
Mouse
;
kbdc
chan
int
;
quitc
chan
bool
;
resizec
chan
bool
;
}
// *Window implements draw.Context
...
...
@@ -89,7 +89,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
xsubsys
:=
subsys
;
if
srpcEnabled
{
waitBridge
();
xsubsys
&^=
SubsystemVideo
|
SubsystemEmbed
;
xsubsys
&^=
SubsystemVideo
|
SubsystemEmbed
;
}
if
xsubsys
&
SubsystemEmbed
!=
0
{
...
...
@@ -102,7 +102,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
return
nil
,
err
;
}
if
subsys
&
SubsystemVideo
!=
0
{
if
subsys
&
SubsystemVideo
!=
0
{
if
dx
,
dy
,
err
=
videoInit
(
dx
,
dy
);
err
!=
nil
{
return
nil
,
err
;
}
...
...
@@ -113,7 +113,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
w
.
quitc
=
make
(
chan
bool
);
}
if
subsys
&
SubsystemAudio
!=
0
{
if
subsys
&
SubsystemAudio
!=
0
{
var
n
int
;
if
n
,
err
=
audioInit
(
AudioFormatStereo44K
,
2048
);
err
!=
nil
{
return
nil
,
err
;
...
...
@@ -121,7 +121,7 @@ func Init(subsys int, dx, dy int) (*Window, os.Error) {
println
(
"audio"
,
n
);
}
if
subsys
&
SubsystemVideo
!=
0
{
if
subsys
&
SubsystemVideo
!=
0
{
go
w
.
readEvents
();
}
...
...
@@ -158,7 +158,7 @@ func videoUpdate(data []Color) (err os.Error) {
return
os
.
NewSyscallError
(
"video_update"
,
syscall
.
VideoUpdate
((
*
uint32
)(
&
data
[
0
])));
}
var
noEvents
=
os
.
NewError
(
"no events"
)
;
var
noEvents
=
os
.
NewError
(
"no events"
)
func
videoPollEvent
(
ev
[]
byte
)
(
err
os
.
Error
)
{
if
srpcEnabled
{
...
...
@@ -167,7 +167,7 @@ func videoPollEvent(ev []byte) (err os.Error) {
return
noEvents
;
}
bytes
.
Copy
(
ev
,
&
bridge
.
share
.
eq
.
event
[
r
]);
bridge
.
share
.
eq
.
ri
=
(
r
+
1
)
%
eqsize
;
bridge
.
share
.
eq
.
ri
=
(
r
+
1
)
%
eqsize
;
return
nil
;
}
return
os
.
NewSyscallError
(
"video_poll_event"
,
syscall
.
VideoPollEvent
(
&
ev
[
0
]));
...
...
@@ -209,13 +209,13 @@ func AudioStream(data []uint16) (nextSize int, err os.Error) {
// Synchronization structure to wait for bridge to become ready.
var
bridge
struct
{
c
chan
bool
;
displayFd
int
;
rpcFd
int
;
share
*
videoShare
;
pixel
[]
Color
;
client
*
srpc
.
Client
;
flushRPC
*
srpc
.
RPC
;
c
chan
bool
;
displayFd
int
;
rpcFd
int
;
share
*
videoShare
;
pixel
[]
Color
;
client
*
srpc
.
Client
;
flushRPC
*
srpc
.
RPC
;
}
// Wait for bridge to become ready.
...
...
@@ -227,27 +227,27 @@ func waitBridge() {
bridge
.
c
<-
<-
bridge
.
c
;
}
const
eqsize
=
64
;
const
eqsize
=
64
// Data structure shared with host via mmap.
type
videoShare
struct
{
revision
int32
;
// definition below is rev 100 unless noted
mapSize
int32
;
revision
int32
;
// definition below is rev 100 unless noted
mapSize
int32
;
// event queue
eq
struct
{
ri
uint32
;
// read index [0,eqsize)
wi
uint32
;
// write index [0,eqsize)
eof
int32
;
event
[
eqsize
][
64
]
byte
;
eq
struct
{
ri
uint32
;
// read index [0,eqsize)
wi
uint32
;
// write index [0,eqsize)
eof
int32
;
event
[
eqsize
][
64
]
byte
;
};
// now unused
_
,
_
,
_
,
_
int32
;
_
,
_
,
_
,
_
int32
;
// video backing store information
width
,
height
,
_
,
size
int32
;
ready
int32
;
// rev 0x101
width
,
height
,
_
,
size
int32
;
ready
int32
;
// rev 0x101
}
// The frame buffer data is videoShareSize bytes after
...
...
@@ -271,7 +271,7 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
addr
,
_
,
errno
:=
syscall
.
Syscall6
(
syscall
.
SYS_MMAP
,
0
,
uintptr
(
st
.
Size
),
syscall
.
PROT_READ
|
syscall
.
PROT_WRITE
,
syscall
.
PROT_READ
|
syscall
.
PROT_WRITE
,
syscall
.
MAP_SHARED
,
uintptr
(
bridge
.
displayFd
),
0
);
...
...
@@ -284,8 +284,8 @@ func (multimediaBridge) Run(arg, ret []interface{}, size []int) srpc.Errno {
// Overestimate frame buffer size
// (must use a compile-time constant)
// and then reslice. 256 megapixels (1 GB) should be enough.
fb
:=
(
*
[
256
*
1024
*
1024
]
Color
)(
unsafe
.
Pointer
(
addr
+
videoShareSize
));
bridge
.
pixel
=
fb
[
0
:
(
st
.
Size
-
videoShareSize
)
/
4
];
fb
:=
(
*
[
256
*
1024
*
1024
]
Color
)(
unsafe
.
Pointer
(
addr
+
videoShareSize
));
bridge
.
pixel
=
fb
[
0
:
(
st
.
Size
-
videoShareSize
)
/
4
];
// Configure RPC connection back to client.
var
err
os
.
Error
;
...
...
@@ -308,4 +308,3 @@ func init() {
srpc
.
Add
(
"nacl_multimedia_bridge"
,
"hh:"
,
multimediaBridge
{});
}
}
src/pkg/exp/nacl/av/event.go
View file @
6238964d
This diff is collapsed.
Click to expand it.
src/pkg/exp/nacl/av/image.go
View file @
6238964d
...
...
@@ -16,11 +16,11 @@ import (
// linear slice or as a two-dimensional slice of slices.
// Image implements image.Image.
type
Image
struct
{
Linear
[]
Color
;
Pixel
[][]
Color
;
Linear
[]
Color
;
Pixel
[][]
Color
;
}
var
_
image
.
Image
=
(
*
Image
)(
nil
)
;
var
_
image
.
Image
=
(
*
Image
)(
nil
)
func
(
m
*
Image
)
ColorModel
()
image
.
ColorModel
{
return
ColorModel
;
...
...
@@ -62,18 +62,19 @@ func newImage(dx, dy int, linear []Color) *Image {
// A Color represents a Native Client color value,
// a 32-bit R, G, B, A value packed as 0xAARRGGBB.
type
Color
uint32
func
(
p
Color
)
RGBA
()
(
r
,
g
,
b
,
a
uint32
)
{
x
:=
uint32
(
p
);
a
=
x
>>
24
;
a
|=
a
<<
8
;
a
|=
a
<<
16
;
r
=
(
x
>>
16
)
&
0xFF
;
r
=
(
x
>>
16
)
&
0xFF
;
r
|=
r
<<
8
;
r
|=
r
<<
16
;
g
=
(
x
>>
8
)
&
0xFF
;
g
=
(
x
>>
8
)
&
0xFF
;
g
|=
g
<<
8
;
g
|=
g
<<
16
;
b
=
x
&
0xFF
;
b
=
x
&
0xFF
;
b
|=
b
<<
8
;
b
|=
b
<<
16
;
return
;
...
...
@@ -91,5 +92,4 @@ func toColor(color image.Color) image.Color {
}
// ColorModel is the color model corresponding to the Native Client Color.
var
ColorModel
=
image
.
ColorModelFunc
(
toColor
);
var
ColorModel
=
image
.
ColorModelFunc
(
toColor
)
src/pkg/exp/nacl/srpc/client.go
View file @
6238964d
...
...
@@ -14,30 +14,30 @@ import (
// A Client represents the client side of an SRPC connection.
type
Client
struct
{
fd
int
;
// fd to server
r
msgReceiver
;
s
msgSender
;
service
map
[
string
]
srv
;
// services by name
out
chan
*
msg
;
// send to out to write to connection
mu
sync
.
Mutex
;
// protects pending, idGen
pending
map
[
uint64
]
*
RPC
;
idGen
uint64
;
// generator for request IDs
fd
int
;
// fd to server
r
msgReceiver
;
s
msgSender
;
service
map
[
string
]
srv
;
// services by name
out
chan
*
msg
;
// send to out to write to connection
mu
sync
.
Mutex
;
// protects pending, idGen
pending
map
[
uint64
]
*
RPC
;
idGen
uint64
;
// generator for request IDs
}
// A srv is a single method that the server offers.
type
srv
struct
{
num
uint32
;
// method number
fmt
string
;
// argument format
num
uint32
;
// method number
fmt
string
;
// argument format
}
// An RPC represents a single RPC issued by a client.
type
RPC
struct
{
Ret
[]
interface
{};
// Return values
Done
chan
*
RPC
;
// Channel where notification of done arrives
Errno
Errno
;
// Status code
c
*
Client
;
id
uint64
;
// request id
Ret
[]
interface
{};
// Return values
Done
chan
*
RPC
;
// Channel where notification of done arrives
Errno
Errno
;
// Status code
c
*
Client
;
id
uint64
;
// request id
}
// NewClient allocates a new client using the file descriptor fd.
...
...
@@ -53,8 +53,8 @@ func NewClient(fd int) (c *Client, err os.Error) {
m
:=
&
msg
{
protocol
:
protocol
,
isReq
:
true
,
Ret
:
[]
interface
{}{
[]
byte
(
nil
)
},
Size
:
[]
int
{
4000
},
Ret
:
[]
interface
{}{
[]
byte
(
nil
)
},
Size
:
[]
int
{
4000
},
};
m
.
packRequest
();
c
.
s
.
send
(
m
);
...
...
@@ -72,7 +72,7 @@ func NewClient(fd int) (c *Client, err os.Error) {
if
i
<
0
{
continue
;
}
c
.
service
[
string
(
line
[
0
:
i
])]
=
srv
{
uint32
(
n
),
string
(
line
[
i
+
1
:
len
(
line
)])};
c
.
service
[
string
(
line
[
0
:
i
])]
=
srv
{
uint32
(
n
),
string
(
line
[
i
+
1
:
len
(
line
)])};
}
c
.
out
=
make
(
chan
*
msg
);
...
...
@@ -159,11 +159,11 @@ func (r *RPC) Start(name string, arg []interface{}) {
for
srv
.
fmt
[
i
]
!=
':'
{
i
++
;
}
fmt
:=
srv
.
fmt
[
i
+
1
:
len
(
srv
.
fmt
)];
fmt
:=
srv
.
fmt
[
i
+
1
:
len
(
srv
.
fmt
)];
// Now the return prototypes.
m
.
Ret
=
make
([]
interface
{},
len
(
fmt
)
-
i
);
m
.
Size
=
make
([]
int
,
len
(
fmt
)
-
i
);
m
.
Ret
=
make
([]
interface
{},
len
(
fmt
)
-
i
);
m
.
Size
=
make
([]
int
,
len
(
fmt
)
-
i
);
for
i
:=
0
;
i
<
len
(
fmt
);
i
++
{
switch
fmt
[
i
]
{
default
:
...
...
src/pkg/exp/nacl/srpc/msg.go
View file @
6238964d
...
...
@@ -17,8 +17,9 @@ import (
// An Errno is an SRPC status code.
type
Errno
uint32
const
(
OK
Errno
=
256
+
iota
;
OK
Errno
=
256
+
iota
;
ErrBreak
;
ErrMessageTruncated
;
ErrNoMemory
;
...
...
@@ -33,27 +34,27 @@ const (
ErrAppError
;
)
var
errstr
=
[
...
]
string
{
var
errstr
=
[
...
]
string
{
OK
-
OK
:
"ok"
,
ErrBreak
-
OK
:
"break"
,
ErrMessageTruncated
-
OK
:
"message truncated"
,
ErrNoMemory
-
OK
:
"out of memory"
,
ErrProtocolMismatch
-
OK
:
"protocol mismatch"
,
ErrBadRPCNumber
-
OK
:
"invalid RPC method number"
,
ErrBadArgType
-
OK
:
"unexpected argument type"
,
ErrTooFewArgs
-
OK
:
"too few arguments"
,
ErrTooManyArgs
-
OK
:
"too many arguments"
,
ErrInArgTypeMismatch
-
OK
:
"input argument type mismatch"
,
ErrOutArgTypeMismatch
-
OK
:
"output argument type mismatch"
,
ErrInternalError
-
OK
:
"internal error"
,
ErrAppError
-
OK
:
"application error"
,
ErrMessageTruncated
-
OK
:
"message truncated"
,
ErrNoMemory
-
OK
:
"out of memory"
,
ErrProtocolMismatch
-
OK
:
"protocol mismatch"
,
ErrBadRPCNumber
-
OK
:
"invalid RPC method number"
,
ErrBadArgType
-
OK
:
"unexpected argument type"
,
ErrTooFewArgs
-
OK
:
"too few arguments"
,
ErrTooManyArgs
-
OK
:
"too many arguments"
,
ErrInArgTypeMismatch
-
OK
:
"input argument type mismatch"
,
ErrOutArgTypeMismatch
-
OK
:
"output argument type mismatch"
,
ErrInternalError
-
OK
:
"internal error"
,
ErrAppError
-
OK
:
"application error"
,
}
func
(
e
Errno
)
String
()
string
{
if
e
<
OK
||
int
(
e
-
OK
)
>=
len
(
errstr
)
{
return
"Errno("
+
strconv
.
Itoa64
(
int64
(
e
))
+
")"
return
"Errno("
+
strconv
.
Itoa64
(
int64
(
e
))
+
")"
;
}
return
errstr
[
e
-
OK
];
return
errstr
[
e
-
OK
];
}
// A *msgHdr is the data argument to the imc_recvmsg
...
...
@@ -61,45 +62,45 @@ func (e Errno) String() string {
// counts trusted by the system calls, the data structure is unsafe
// to expose to package clients.
type
msgHdr
struct
{
iov
*
iov
;
niov
int32
;
desc
*
int32
;
ndesc
int32
;
flags
uint32
;
iov
*
iov
;
niov
int32
;
desc
*
int32
;
ndesc
int32
;
flags
uint32
;
}
// A single region for I/O. Just as unsafe as msgHdr.
type
iov
struct
{
base
*
byte
;
len
int32
;
base
*
byte
;
len
int32
;
}
// A msg is the Go representation of a message.
type
msg
struct
{
rdata
[]
byte
;
// data being consumed during message parsing
rdesc
[]
int32
;
// file descriptors being consumed during message parsing
wdata
[]
byte
;
// data being generated when replying
rdata
[]
byte
;
// data being consumed during message parsing
rdesc
[]
int32
;
// file descriptors being consumed during message parsing
wdata
[]
byte
;
// data being generated when replying
// parsed version of message
protocol
uint32
;
requestId
uint64
;
isReq
bool
;
rpcNumber
uint32
;
gotHeader
bool
;
status
Errno
;
// error code sent in response
Arg
[]
interface
{};
// method arguments
Ret
[]
interface
{};
// method results
Size
[]
int
;
// max sizes for arrays in method results
fmt
string
;
// accumulated format string of arg+":"+ret
protocol
uint32
;
requestId
uint64
;
isReq
bool
;
rpcNumber
uint32
;
gotHeader
bool
;
status
Errno
;
// error code sent in response
Arg
[]
interface
{};
// method arguments
Ret
[]
interface
{};
// method results
Size
[]
int
;
// max sizes for arrays in method results
fmt
string
;
// accumulated format string of arg+":"+ret
}
// A msgReceiver receives messages from a file descriptor.
type
msgReceiver
struct
{
fd
int
;
data
[
128
*
1024
]
byte
;
desc
[
8
]
int32
;
hdr
msgHdr
;
iov
iov
;
fd
int
;
data
[
128
*
1024
]
byte
;
desc
[
8
]
int32
;
hdr
msgHdr
;
iov
iov
;
}
func
(
r
*
msgReceiver
)
recv
()
(
*
msg
,
os
.
Error
)
{
...
...
@@ -136,10 +137,9 @@ func (r *msgReceiver) recv() (*msg, os.Error) {
// A msgSender sends messages on a file descriptor.
type
msgSender
struct
{
fd
int
;
hdr
msgHdr
;
iov
iov
;
fd
int
;
hdr
msgHdr
;
iov
iov
;
}
func
(
s
*
msgSender
)
send
(
m
*
msg
)
os
.
Error
{
...
...
@@ -222,8 +222,8 @@ func (m *msg) grow(n int) []byte {
bytes
.
Copy
(
a
,
m
.
wdata
);
m
.
wdata
=
a
;
}
m
.
wdata
=
m
.
wdata
[
0
:
i
+
n
];
return
m
.
wdata
[
i
:
i
+
n
];
m
.
wdata
=
m
.
wdata
[
0
:
i
+
n
];
return
m
.
wdata
[
i
:
i
+
n
];
}
func
(
m
*
msg
)
wuint8
(
x
uint8
)
{
...
...
@@ -529,4 +529,3 @@ func (m *msg) packResponse() {
m
.
wuint32
(
uint32
(
len
(
m
.
Ret
)));
m
.
packValues
(
m
.
Ret
);
}
src/pkg/exp/nacl/srpc/server.go
View file @
6238964d
...
...
@@ -22,13 +22,13 @@ import (
// It reads arguments from arg, checks size for array limits,
// writes return values to ret, and returns an Errno status code.
type
Handler
interface
{
Run
(
arg
,
ret
[]
interface
{},
size
[]
int
)
Errno
Run
(
arg
,
ret
[]
interface
{},
size
[]
int
)
Errno
;
}
type
method
struct
{
name
string
;
fmt
string
;
handler
Handler
;
name
string
;
fmt
string
;
handler
Handler
;
}
var
rpcMethod
[]
method
...
...
@@ -61,7 +61,7 @@ func Add(name, fmt string, handler Handler) {
}
rpcMethod
=
a
;
}
rpcMethod
=
rpcMethod
[
0
:
n
+
1
];
rpcMethod
=
rpcMethod
[
0
:
n
+
1
];
rpcMethod
[
n
]
=
method
{
name
,
fmt
,
handler
};
}
...
...
@@ -175,7 +175,7 @@ func getFd() (fd int, err os.Error) {
// Enabled returns true if SRPC is enabled in the Native Client runtime.
func
Enabled
()
bool
{
_
,
err
:=
getFd
();
_
,
err
:=
getFd
();
return
err
==
nil
;
}
...
...
@@ -201,4 +201,3 @@ func (serviceDiscovery) Run(arg, ret []interface{}, size []int) Errno {
func
init
()
{
Add
(
"service_discovery"
,
":C"
,
serviceDiscovery
{});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment