author | Tero Marttila <terom@fixme.fi> |
Sat, 09 Aug 2008 01:00:35 +0300 | |
changeset 35 | 020fdab3c986 |
parent 19 | d18606bb6f20 |
permissions | -rw-r--r-- |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
1 |
#include <stdlib.h> |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
2 |
#include <unistd.h> |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
3 |
#include <errno.h> |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
4 |
#include <assert.h> |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
6 |
#include "common.h" |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
7 |
#include "render_struct.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
#include "render_multi.h" |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
9 |
#include "render_remote.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
#include "remote_node.h" |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
11 |
#include "remote_pool.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
12 |
#include "render_slices_struct.h" |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
13 |
#include "render_slices.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
15 |
/* |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
16 |
// the states we can go through |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
17 |
enum render_multi_state { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
18 |
STATE_INIT, // the render_multi is in the process of being initialized |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
19 |
STATE_SENDING, // we're still waiting for some of the requests to be sent |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
20 |
STATE_RENDER, // we're handling data now! |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
21 |
STATE_DATA_DONE, // we're finished with all the data |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
22 |
STATE_PNG_DONE, // PNG data's done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
23 |
STATE_FAILED, // we failed |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
24 |
}; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
25 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
26 |
enum render_multi_node_state { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
27 |
STATE_INIT, // the render_multi_node is in the process of being initialized |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
28 |
STATE_SENDING, // we're waiting for the requests to be sent |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
29 |
STATE_FILL_ROW, // we're filling the row with data |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
30 |
STATE_ROW_FULL, // our row is full |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
31 |
STATE_DATA_DONE, // we're finished with all the data |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
32 |
STATE_PNG_DONE, // PNG data's done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
33 |
STATE_FAILED, // we failed |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
34 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
35 |
}; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
36 |
*/ |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
37 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
struct render_multi { |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
// these are used as arguments to render_remote |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
40 |
struct render_multi_node { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
41 |
// the slice info |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
42 |
struct render_slice_info *info; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
44 |
// the render_remote_ctx |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
45 |
struct render_remote *render_remote; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
47 |
// _render_multi_sent called for this? |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
int render_sent; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
49 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
50 |
// how wide our slice is, static |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
51 |
size_t slice_width; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
52 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
53 |
// how many bytes we have already written into the current row |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
54 |
size_t col; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
55 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
56 |
// passed in the last segment of data? |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
57 |
int render_done; |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
58 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
59 |
// a pointer to ourself |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
60 |
struct render_multi *self; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
61 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
62 |
} nodes[RENDER_SLICES_MAX]; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
64 |
// how many nodes we have |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
65 |
int node_count; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
67 |
// is this still alive? |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
68 |
int alive; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
69 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
70 |
// how many remote renders have been succesfully cb_sent? |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
71 |
int renders_sent; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
72 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
73 |
// how many of the renders are done? |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
74 |
int renders_done; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
75 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
76 |
// have we called cb_sent? |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
77 |
int have_sent; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
78 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
79 |
// the render_slices thing |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
80 |
struct render_slices slices; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
81 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
82 |
// has render_slices_done returned? |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
83 |
int slices_done; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
84 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
85 |
// buffer render_png output in this |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
86 |
struct evbuffer *out_buf; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
87 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
// our own callbacks that we call |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
void (*cb_sent)(void *arg); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
void (*cb_data)(struct evbuffer *buf, void *arg); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
void (*cb_done)(void *arg); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
void (*cb_fail)(void *arg); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
void *cb_arg; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
}; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
97 |
#define FAIL_PARTIAL 0x01 |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
98 |
#define FAIL_SILENT 0x02 |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
99 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
100 |
// prototypes |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
101 |
static void _render_multi_do_free (struct render_multi *ctx); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
102 |
static void _render_multi_do_sent (struct render_multi *ctx); |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
103 |
static void _render_multi_do_png_data (struct render_multi *ctx); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
104 |
static void _render_multi_do_png_done (struct render_multi *ctx); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
105 |
static void _render_multi_do_done (struct render_multi *ctx); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
106 |
static void _render_multi_do_fail (struct render_multi *ctx, int flags); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
107 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
108 |
/* |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
109 |
* Actually free the request. Should be de-initialized (either _render_multi_error, or _render_done when this is called |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
110 |
*/ |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
111 |
static void _render_multi_do_free (struct render_multi *ctx) { |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
112 |
assert(ctx && ctx->alive == 0); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
113 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
114 |
render_slices_deinit(&ctx->slices); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
115 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
116 |
if (ctx->out_buf) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
117 |
evbuffer_free(ctx->out_buf); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
118 |
ctx->out_buf = NULL; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
119 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
120 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
121 |
free(ctx); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
122 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
123 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
124 |
// the request has been sent |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
125 |
static void _render_multi_do_sent (struct render_multi *ctx) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
126 |
int i; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
127 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
128 |
// check that all the nodes have indeed been sent |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
129 |
for (i = 0; i < ctx->node_count; i++) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
130 |
assert(ctx->nodes[i].render_sent); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
131 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
132 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
133 |
// assert the callbacks are still valid |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
134 |
assert(ctx->cb_sent && ctx->cb_fail && ctx->cb_done); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
135 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
136 |
// call cb_sent and then invalidate it |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
137 |
ctx->cb_sent(ctx->cb_arg); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
138 |
ctx->cb_sent = NULL; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
139 |
ctx->have_sent = 1; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
140 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
141 |
// we're going to always have the PNG header data buffered at this point, so give that to the user right away |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
142 |
assert(evbuffer_get_length(ctx->out_buf) > 0); |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
143 |
_render_multi_do_png_data(ctx); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
144 |
} |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
145 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
146 |
// possibly call cb_data, and if the renders are all done and the buffer is empty, cb_done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
147 |
static void _render_multi_do_png_data (struct render_multi *ctx) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
148 |
// at first we have to wait until we've called cb_sent |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
149 |
if (!ctx->have_sent) |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
150 |
return; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
151 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
152 |
// got any PNG data in there? |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
153 |
if (evbuffer_get_length(ctx->out_buf)) |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
154 |
ctx->cb_data(ctx->out_buf, ctx->cb_arg); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
155 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
156 |
// was that the last piece of PNG data? |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
157 |
if (ctx->slices_done && evbuffer_get_length(ctx->out_buf) == 0) { |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
158 |
// PNG data done! |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
159 |
_render_multi_do_png_done(ctx); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
160 |
} |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
161 |
} |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
162 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
163 |
// the PNG rendering completed succesfully |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
164 |
static void _render_multi_do_png_done (struct render_multi *ctx) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
165 |
// check that ctx is still valid |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
166 |
assert(ctx->alive); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
167 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
168 |
// mark as not alive |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
169 |
ctx->alive = 0; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
170 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
171 |
// call cb_done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
172 |
ctx->cb_done(ctx->cb_arg); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
173 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
174 |
// don't free ourself, our user does that (probably did already) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
175 |
return; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
176 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
177 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
178 |
// the request completed normally, flush the png data and return |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
179 |
// _render_multi_png_done takes care of calling cb_done, not us! |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
180 |
static void _render_multi_do_done (struct render_multi *ctx) { |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
181 |
assert(ctx->alive); |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
182 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
183 |
int i; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
184 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
185 |
// check that all the remote_renders are indeed complete |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
186 |
for (i = 0; i < ctx->node_count; i++) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
187 |
assert(ctx->nodes[i].render_remote == NULL); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
188 |
assert(ctx->nodes[i].col == 0); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
189 |
} |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
190 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
191 |
// finish off the render_slices |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
192 |
if (render_slices_done(&ctx->slices)) |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
193 |
ERROR("render_slices_done"); |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
194 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
195 |
// mark this as complete, all data is now in the out buffer |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
196 |
ctx->slices_done = 1; |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
197 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
198 |
// if that all the data handled now, we're done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
199 |
_render_multi_do_png_data(ctx); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
200 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
201 |
// don't free ourself, our user does that (probably already did, via render_png_done) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
202 |
return; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
203 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
204 |
error: |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
205 |
/* render_slices_done -> render_png_done failed, probably because we didn't have enough data */ |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
206 |
_render_multi_do_fail(ctx, FAIL_PARTIAL); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
207 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
208 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
209 |
// the request completed abnormally. Flags: |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
210 |
// FAIL_SILENT - don't call cb_fail |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
211 |
// FAIL_PARTIAL - assume png_info may be NULL |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
212 |
static void _render_multi_do_fail (struct render_multi *ctx, int flags) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
213 |
int i; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
214 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
215 |
// check that ctx is still valid |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
216 |
assert(ctx->alive || flags & FAIL_PARTIAL); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
217 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
218 |
// mark as not alive |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
219 |
ctx->alive = 0; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
220 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
221 |
// cancel any in-progress remote renders |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
222 |
for (i = 0; i < ctx->node_count; i++) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
223 |
if (ctx->nodes[i].render_remote) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
224 |
render_remote_cancel(ctx->nodes[i].render_remote); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
225 |
ctx->nodes[i].render_remote = NULL; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
226 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
227 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
228 |
// XXX: does render_slices need an abort? |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
229 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
230 |
// check that both callbacks are still valid |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
231 |
assert(ctx->cb_fail && ctx->cb_done); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
232 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
233 |
if (!(flags & FAIL_SILENT)) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
234 |
// call cb_fail and then invalidate it |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
235 |
ctx->cb_fail(ctx->cb_arg); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
236 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
237 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
238 |
ctx->cb_fail = NULL; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
239 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
240 |
// don't free ourself, our user does that |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
241 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
242 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
243 |
/* |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
244 |
* One of the remote render commands has succesfully been sent. |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
245 |
* |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
246 |
* Once all of these commands have been sent, invoke our cb_sent. |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
247 |
*/ |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
248 |
static void _render_multi_sent (void *arg) { |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
249 |
struct render_multi_node *ctx = arg; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
250 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
251 |
// mark these as sent |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
252 |
ctx->render_sent = 1; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
253 |
ctx->self->renders_sent++; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
254 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
255 |
// have all render_sub_ctxs been sent? |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
256 |
if (ctx->self->renders_sent == ctx->self->node_count) { |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
257 |
// tell our user |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
258 |
_render_multi_do_sent(ctx->self); |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
259 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
260 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
261 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
262 |
/* |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
263 |
* One render node failed, abort the whole thing |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
264 |
*/ |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
265 |
static void _render_multi_fail (void *arg) { |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
266 |
struct render_multi_node *ctx = arg; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
267 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
268 |
// free this ctx's remote render |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
269 |
render_remote_free(ctx->render_remote); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
270 |
ctx->render_remote = NULL; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
271 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
272 |
// cancel the rest + cb_fail |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
273 |
_render_multi_do_fail(ctx->self, 0); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
274 |
} |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
275 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
276 |
/* |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
277 |
* Got new data for some remote render |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
278 |
*/ |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
279 |
static void _render_multi_data_raw (int fd, short event, void *arg) { |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
280 |
struct render_multi_node *ctx = arg; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
281 |
int ret; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
282 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
283 |
assert(ctx->col <= ctx->slice_width); // check it isn't out of range |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
284 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
285 |
// if our slice is full, we don't want to receive any more data |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
286 |
if (ctx->col == ctx->slice_width) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
287 |
return; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
288 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
289 |
// read new data into our slice |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
290 |
ret = read(fd, |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
291 |
ctx->info->render_buf + ctx->col, // our segment buffer + partial segment offset |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
292 |
ctx->slice_width - ctx->col // how many bytes left in the segment |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
293 |
); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
294 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
295 |
// errors/EOF? |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
296 |
if (ret == -1) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
297 |
if (errno == EAGAIN) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
298 |
// false alarm |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
299 |
goto reschedule; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
300 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
301 |
} else |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
302 |
ERROR("read"); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
303 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
304 |
} else if (ret == 0) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
305 |
// this ctx's remote render is done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
306 |
render_remote_done(ctx->render_remote); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
307 |
ctx->render_remote = NULL; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
308 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
309 |
// count how many are done |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
310 |
ctx->self->renders_done++; |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
311 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
312 |
// are all of them done? |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
313 |
if (ctx->self->renders_done == ctx->self->node_count) { |
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
314 |
// finish it off |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
315 |
_render_multi_do_done(ctx->self); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
316 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
317 |
} // else, just wait for the rest to complete |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
318 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
319 |
// do *NOT* reschedule ourself, ctx->render_remote is invalid anyways (as is ctx!) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
320 |
return; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
321 |
} |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
322 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
323 |
// ok, we received some data normally |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
324 |
ctx->col += ret; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
325 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
326 |
// is this segment full now? |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
327 |
if (ctx->col == ctx->slice_width) { |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
328 |
int status; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
329 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
330 |
// pass the segment in to render_slices |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
331 |
if ((status = render_slices_segment_done(&ctx->self->slices, ctx->info->index)) == -1) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
332 |
ERROR("render_slices_segment_done"); |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
333 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
334 |
// reset the col marker |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
335 |
ctx->col = 0; |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
336 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
337 |
// row done? |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
338 |
if (status & SLICE_PROCESS_ROW) { |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
339 |
// process the row via render_slices |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
340 |
status = render_slices_process_row(&ctx->self->slices); |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
341 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
342 |
} |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
343 |
|
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
344 |
// do we need to continue? |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
345 |
if (status & SLICE_CONTINUE) { |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
346 |
// reschedule the reads in case they were ~SLICE_CONTINUE |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
347 |
int i; |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
348 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
349 |
for (i = 0; i < ctx->self->node_count; i++) { |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
350 |
// just don't reschedule those that are already EOF... |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
351 |
if (ctx->self->nodes[i].render_remote) |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
352 |
render_remote_reschedule(ctx->self->nodes[i].render_remote); |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
353 |
} |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
354 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
355 |
} else { |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
356 |
// don't read any more data yet, we'll be rescheduled by someone else |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
357 |
return; |
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
358 |
|
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
359 |
} |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
360 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
361 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
362 |
// ok, reschedule ourselves |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
363 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
364 |
reschedule: |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
365 |
// reschedule a new call once we get more data |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
366 |
render_remote_reschedule(ctx->render_remote); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
367 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
368 |
return; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
369 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
370 |
error: |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
371 |
_render_multi_do_fail(ctx->self, 0); |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
372 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
373 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
374 |
/* |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
375 |
* We fed a row of pixels into render_png, and this PNG data came out. |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
376 |
* |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
377 |
* We need to pass it back to our caller |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
378 |
*/ |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
379 |
static int _render_multi_png_data (const unsigned char *data, size_t length, void *arg) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
380 |
struct render_multi *ctx = arg; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
381 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
382 |
// XXX: need a better user-API to avoid these data copies |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
383 |
if (evbuffer_add(ctx->out_buf, data, length)) |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
384 |
ERROR("evbuffer_add"); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
385 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
386 |
// handle cb_data/cb_done |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
387 |
_render_multi_do_png_data(ctx); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
388 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
389 |
// ok |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
390 |
return 0; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
391 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
392 |
error: |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
393 |
// don't do any failing here, this will return control to a _render_* function that will handle it |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
394 |
return -1; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
395 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
396 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
397 |
struct render_multi *render_multi ( |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
398 |
struct render *render, // what to render |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
399 |
struct remote_pool *pool_info, // what render pool to use |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
400 |
void (*cb_sent)(void *arg), |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
401 |
void (*cb_data)(struct evbuffer *buf, void *arg), |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
402 |
void (*cb_done)(void *arg), |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
403 |
void (*cb_fail)(void *arg), |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
404 |
void *cb_arg |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
405 |
) { |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
406 |
struct render_multi *ctx = NULL; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
407 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
408 |
// alloc the render_multi |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
409 |
ctx = calloc(1, sizeof(struct render_multi)); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
410 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
411 |
if (!ctx) |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
412 |
ERROR("calloc"); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
413 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
414 |
// store the provided callback functions |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
415 |
ctx->cb_sent = cb_sent; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
416 |
ctx->cb_data = cb_data; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
417 |
ctx->cb_done = cb_done; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
418 |
ctx->cb_fail = cb_fail; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
419 |
ctx->cb_arg = cb_arg; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
420 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
421 |
// store our render_png callbacks, must be before png_info |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
422 |
if (render_io_custom(render, &_render_multi_png_data, NULL, ctx)) |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
423 |
ERROR("render_io_custom"); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
424 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
425 |
// evbuffer, must be before png_info |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
426 |
if (!(ctx->out_buf = evbuffer_new())) |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
427 |
ERROR("evbuffer_new"); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
428 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
429 |
// then initialize the render_slices |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
430 |
if (render_slices_init(&ctx->slices, render)) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
431 |
ERROR("render_slices_init"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
432 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
433 |
// how many nodes? |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
434 |
ctx->node_count = render_slices_get_count(&ctx->slices); |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
435 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
436 |
// load them |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
437 |
int i; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
438 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
439 |
for (i = 0; i < ctx->node_count; i++) { |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
440 |
// store the info struct |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
441 |
ctx->nodes[i].info = render_slices_get_slice_info(&ctx->slices, i); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
442 |
|
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
443 |
// some simple attributes |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
444 |
ctx->nodes[i].slice_width = ctx->nodes[i].info->render_info->img_w; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
445 |
ctx->nodes[i].self = ctx; |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
446 |
|
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
447 |
|
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
448 |
// the render_remote |
19
d18606bb6f20
a working threaded sliced render, plus modifications to other modules to use this in web_main
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
449 |
if (!(ctx->nodes[i].render_remote = render_remote_rawio(ctx->nodes[i].info->render_info, pool_info, |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
450 |
&_render_multi_sent, &_render_multi_fail, &_render_multi_data_raw, &ctx->nodes[i])) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
451 |
) |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
452 |
ERROR("render_remote_rawio"); |
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
16
diff
changeset
|
453 |
} |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
454 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
455 |
// we are now alive |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
456 |
ctx->alive = 1; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
457 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
458 |
// I guess that's a succesfull start now |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
459 |
return ctx; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
460 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
461 |
error: |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
462 |
_render_multi_do_fail(ctx, FAIL_SILENT | FAIL_PARTIAL); |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
463 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
464 |
return NULL; |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
465 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
466 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
467 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
468 |
void render_multi_set_recv (struct render_multi *ctx, size_t recv_threshold, size_t unread_buffer) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
469 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
470 |
} |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
471 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
472 |
int render_multi_flush (struct render_multi *ctx) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
473 |
_render_multi_do_png_data(ctx); |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
474 |
|
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
475 |
return 0; |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
476 |
} |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
477 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
478 |
void render_multi_cancel (struct render_multi *ctx) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
479 |
_render_multi_do_fail(ctx, FAIL_SILENT); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
480 |
} |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
481 |
|
16
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
482 |
void render_multi_free (struct render_multi *ctx) { |
50995bbe442a
render_multi works a bit more efficiently now
Tero Marttila <terom@fixme.fi>
parents:
15
diff
changeset
|
483 |
_render_multi_do_free(ctx); |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
484 |
} |