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

Side by Side Diff: tools/fiddle/fiddler.go

Issue 2138153002: tools/fiddle: remove unused fiddler.go (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « tools/fiddle/fiddle_test ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7 package main
8
9 // Example use:
10 // git clone https://skia.googlesource.com/skia.git
11 // cd skia
12 // SKIA=$PWD
13 // cd tools/fiddle
14 // go get github.com/skia-dev/glog
15 // go get go.skia.org/infra/go/util
16 // go build fiddler.go
17 // # compile prerequisites
18 // ./fiddler "$SKIA"
19 // # compile and run a fiddle
20 // ./fiddler "$SKIA" draw.cpp | ./parse-fiddle-output
21 // # compile and run a different fiddle
22 // ./fiddler "$SKIA" ANOTHER_FIDDLE.cpp | ./parse-fiddle-output
23
24 import (
25 "bytes"
26 "fmt"
27 "io"
28 "io/ioutil"
29 "os"
30 "os/exec"
31 "path"
32 "syscall"
33
34 "github.com/skia-dev/glog"
35 "go.skia.org/infra/go/util"
36 )
37
38 func fiddlePath() string {
39 return path.Join("tools", "fiddle")
40 }
41 func setResourceLimits() error {
42 const maximumTimeInSeconds = 5
43 limit := syscall.Rlimit{maximumTimeInSeconds, maximumTimeInSeconds}
44 if err := syscall.Setrlimit(syscall.RLIMIT_CPU, &limit); err != nil {
45 return err
46 }
47 const maximumMemoryInBytes = 1 << 28
48 limit = syscall.Rlimit{maximumMemoryInBytes, maximumMemoryInBytes}
49 return syscall.Setrlimit(syscall.RLIMIT_AS, &limit)
50 }
51
52 // execCommand runs command and returns an error if it fails. If there is no
53 // error, all output is discarded.
54 func execCommand(input io.Reader, dir string, name string, arg ...string) error {
55 var buffer bytes.Buffer
56 cmd := exec.Command(name, arg...)
57 cmd.Dir = dir
58 cmd.Stdout = &buffer
59 cmd.Stderr = &buffer
60 cmd.Stdin = input
61 if err := cmd.Run(); err != nil {
62 return fmt.Errorf("execution failed:\n\n%s\n[%v]", buffer.String (), err)
63 }
64 return nil
65 }
66
67 func compileArgs(skiaSrc string) string {
68 return "@" + path.Join(skiaSrc, "cmake", "skia_compile_arguments.txt")
69 }
70
71 func linkArgs(skiaSrc string) string {
72 return "@" + path.Join(skiaSrc, "cmake", "skia_link_arguments.txt")
73 }
74
75 // fiddler compiles the input, links against skia, and runs the executable.
76 // @param skiaSrc: the base directory of the Skia repository
77 // @param inputReader: C++ fiddle source
78 // @param output: stdout of executable sent here
79 // @param tempDir: where to place the compiled executable
80 func fiddler(skiaSrc string, inputReader io.Reader, output io.Writer, tempDir st ring) error {
81 binarypath := path.Join(tempDir, "fiddle")
82 fiddle_dir := path.Join(skiaSrc, fiddlePath())
83 if err := execCommand(inputReader, fiddle_dir,
84 "c++",
85 compileArgs(skiaSrc),
86 "-I", fiddle_dir,
87 "-o", binarypath,
88 "-x", "c++", "-", "-x", "none",
89 "fiddle_main.o",
90 "-lOSMesa",
91 linkArgs(skiaSrc),
92 ); err != nil {
93 return err
94 }
95 var buffer bytes.Buffer
96 runCmd := exec.Cmd{Path: binarypath, Stdout: output, Stderr: &buffer}
97 if err := runCmd.Run(); err != nil {
98 return fmt.Errorf("execution failed:\n\n%s\n[%v]", buffer.String (), err)
99 }
100 return nil
101 }
102
103 // Compile Skia library and fiddle_main.cpp
104 // @param skiaSrc: the base directory of the Skia repository.
105 func fiddlerPrerequisites(skiaSrc string) error {
106 cmakeDir := path.Join(skiaSrc, "cmake")
107 if err := execCommand(nil, cmakeDir, "cmake", "-G", "Ninja", "."); err ! = nil {
108 return err
109 }
110 if err := execCommand(nil, cmakeDir, "ninja", "skia"); err != nil {
111 return err
112 }
113 fiddle_dir := path.Join(skiaSrc, fiddlePath())
114 if err := execCommand(nil, fiddle_dir, "c++", compileArgs(skiaSrc),
115 "fiddle_main.h"); err != nil {
116 return err
117 }
118 return execCommand(nil, fiddle_dir, "c++", compileArgs(skiaSrc),
119 "-c", "-o", "fiddle_main.o", "fiddle_main.cpp")
120 }
121
122 func main() {
123 if len(os.Args) < 2 {
124 glog.Fatalf("usage: %s SKIA_SRC_PATH [PATH_TO_DRAW.CPP]", os.Arg s[0])
125 }
126 skiaSrc := os.Args[1]
127 if len(os.Args) < 3 {
128 // execCommand(nil, skiaSrc, "git", "fetch")
129 // execCommand(nil, skiaSrc, "git", "checkout", "origin/master")
130 if err := fiddlerPrerequisites(skiaSrc); err != nil {
131 glog.Fatal(err)
132 }
133 } else {
134 if err := setResourceLimits(); err != nil {
135 glog.Fatal(err)
136 }
137 tempDir, err := ioutil.TempDir("", "fiddle_")
138 if err != nil {
139 glog.Fatal(err)
140 }
141 defer func() {
142 err = os.RemoveAll(tempDir)
143 if err != nil {
144 glog.Fatalf("os.RemoveAll(tempDir) failed: %v", err)
145 }
146 }()
147 if os.Args[2] == "-" {
148 if err := fiddler(skiaSrc, os.Stdin, os.Stdout, tempDir) ; err != nil {
149 glog.Fatal(err)
150 }
151 } else {
152 inputFile, err := os.Open(os.Args[2])
153 if err != nil {
154 glog.Fatalf("unable to open \"%s\": %v", os.Args [2], err)
155 }
156 defer util.Close(inputFile)
157 if err = fiddler(skiaSrc, inputFile, os.Stdout, tempDir) ; err != nil {
158 glog.Fatal(err)
159 }
160 }
161 }
162 }
OLDNEW
« no previous file with comments | « tools/fiddle/fiddle_test ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698