source: subversion/applications/utils/mod_tile/render_list.c @ 6744

Last change on this file since 6744 was 6743, checked in by jonb, 12 years ago

mod_tile: Accept normal x,y,z format in render_list

File size: 3.7 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include <unistd.h>
4#include <sys/types.h>
5#include <sys/socket.h>
6#include <sys/stat.h>
7#include <sys/time.h>
8#include <sys/un.h>
9#include <poll.h>
10#include <errno.h>
11#include <math.h>
12
13#include "gen_tile.h"
14#include "protocol.h"
15#include "render_config.h"
16#include "dir_utils.h"
17
18#define DEG_TO_RAD (M_PIl/180)
19#define RAD_TO_DEG (180/M_PIl)
20
21static const int minZoom = 0;
22static const int maxZoom = 18;
23
24
25void display_rate(struct timeval start, struct timeval end, int num) 
26{
27    int d_s, d_us;
28    float sec;
29
30    d_s  = end.tv_sec  - start.tv_sec;
31    d_us = end.tv_usec - start.tv_usec;
32
33    sec = d_s + d_us / 1000000.0;
34
35    printf("Rendered %d tiles in %.2f seconds (%.2f tiles/s)\n", num, sec, num / sec);
36    fflush(NULL);
37}
38
39
40int process_loop(int fd, int x, int y, int z)
41{
42    struct protocol cmd, rsp;
43    //struct pollfd fds[1];
44    int ret = 0;
45
46    bzero(&cmd, sizeof(cmd));
47
48    cmd.ver = 1;
49    cmd.cmd = cmdRender;
50    cmd.z = z;
51    cmd.x = x;
52    cmd.y = y;
53    //strcpy(cmd.path, "/tmp/foo.png");
54
55        //printf("Sending request\n");
56    ret = send(fd, &cmd, sizeof(cmd), 0);
57    if (ret != sizeof(cmd)) {
58        perror("send error");
59    }
60        //printf("Waiting for response\n");
61    bzero(&rsp, sizeof(rsp));
62    ret = recv(fd, &rsp, sizeof(rsp), 0);
63    if (ret != sizeof(rsp)) {
64        perror("recv error");
65        return 0;
66    }
67        //printf("Got response\n");
68
69    if (!ret)
70        perror("Socket send error");
71    return ret;
72}
73
74
75int main(int argc, char **argv)
76{
77    const char *spath = RENDER_SOCKET;
78    int fd;
79    struct sockaddr_un addr;
80    int ret=0;
81    int x, y, z;
82    char name[PATH_MAX];
83    struct timeval start, end;
84    int num_render = 0, num_all = 0;
85
86    fprintf(stderr, "Rendering client\n");
87
88    fd = socket(PF_UNIX, SOCK_STREAM, 0);
89    if (fd < 0) {
90        fprintf(stderr, "failed to create unix socket\n");
91        exit(2);
92    }
93
94    bzero(&addr, sizeof(addr));
95    addr.sun_family = AF_UNIX;
96    strncpy(addr.sun_path, spath, sizeof(addr.sun_path));
97
98    if (connect(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
99        fprintf(stderr, "socket connect failed for: %s\n", spath);
100        close(fd);
101        exit(3);
102    }
103
104    gettimeofday(&start, NULL);
105
106    while(!feof(stdin)) {
107        struct stat s;
108        int n = fscanf(stdin, "%d %d %d", &x, &y, &z);
109
110        if (n != 3) {
111            // Discard input line
112            char tmp[1024];
113            char *r = fgets(tmp, sizeof(tmp), stdin);
114            if (!r)
115                continue;
116            // fprintf(stderr, "bad line %d: %s", num_all, tmp);
117            continue;
118        }
119        printf("got: x(%d) y(%d) z(%d)\n", x, y, z);
120
121        num_all++;
122        xyz_to_path(name, sizeof(name), x, y, z);
123
124        if (stat(name, &s) < 0) {
125            // Assume error is that file doesn't exist
126            // so render it
127            ret = process_loop(fd, x, y, z);
128            num_render++;
129            if (!(num_render % 10)) {
130                gettimeofday(&end, NULL);
131                printf("\n");
132                printf("Meta tiles rendered: ");
133                display_rate(start, end, num_render);
134                printf("Total tiles rendered: ");
135                display_rate(start, end, num_render * METATILE * METATILE);
136                printf("Total tiles handled from input: ");
137                display_rate(start, end, num_all);
138            }
139        }
140    }
141    gettimeofday(&end, NULL);
142    printf("\nTotal for all tiles rendered\n");
143    printf("Meta tiles rendered: ");
144    display_rate(start, end, num_render);
145    printf("Total tiles rendered: ");
146    display_rate(start, end, num_render * METATILE * METATILE);
147    printf("Total tiles handled: ");
148    display_rate(start, end, num_all);
149
150    close(fd);
151    return ret;
152}
Note: See TracBrowser for help on using the repository browser.